Javascript 访问模块';s构造法

Javascript 访问模块';s构造法,javascript,apostrophe-cms,nunjucks,Javascript,Apostrophe Cms,Nunjucks,在中,我有一个自定义模块,我想在其中将Nunjucksapos.area调用中的一个选项传递给小部件本身的构造方法。具体地说,我想根据模板中传递给模块的选项调整getWidgetWrapperClasses的输出。这可能吗 下面是我想要实现的一个例子: lib/modules/example widgets/index.js module.exports = { extend: "apostrophe-widgets", label: "Example widget",

在中,我有一个自定义模块,我想在其中将Nunjucks
apos.area
调用中的一个选项传递给小部件本身的构造方法。具体地说,我想根据模板中传递给模块的选项调整
getWidgetWrapperClasses
的输出。这可能吗

下面是我想要实现的一个例子:

lib/modules/example widgets/index.js

module.exports = {
    extend: "apostrophe-widgets",
    label: "Example widget",
    construct: function(self, options) {
        self.getWidgetWrapperClasses = function(widget) {
            // templateOptions would be the options object as defined
            // in home.html below
            return ["column", "column-" + templateOptions.width];
        };
    }
};
lib/modules/撇号页/views/pages/home.html

{% extends "layout.html" %}

{% block content %}
    <div id="widgets">

        {{ apos.area(data.page, "example", {
            widgets: {
                "example": {
                    width: "half"
                }
            }
        }) }}

    </div>
{% endblock %}
{%extends“layout.html”%}
{%block content%}
{{apos.area(data.page,“示例”{
小部件:{
“示例”:{
宽度:“一半”
}
}
}) }}
{%endblock%}

我解决了这个问题,没有使用
getWidgetWrapperClasses
方法,而是扩展小部件包装模板并覆盖其中的Nunjucks块。如果您查看撇号代码中的
lib/modules/撇号区域/views/widgetBase.html
,这实际上是一种有文档记录的方法

我更改了
lib/modules/example widgets/index.js
如下:

module.exports = {
    extend: "apostrophe-widgets",
    label: "Example widget",
    wrapperTemplate: "wrapper",
    construct: function(self, options) {
        // Do something
    }
};
然后,我添加了一个
lib/modules/example widgets/views/wrapper.html
文件。在该文件中,您只需覆盖
extraWrapperClasses
块即可添加所需的类,同时可以通过
data.options
访问模板选项

{% extends "apostrophe-areas:widget.html" %}

{% block extraWrapperClasses %}column column-{{ data.options.width }}{% endblock %}

很好的解决方案<代码>构造在构造整个模块时调用,而不是单个小部件,因此它永远不会看到传递给特定小部件的
apos.area
的选项
getWidgetWrapperClasses
可能会,但我们没有想到这一点,所以现在只需要一个参数;请随意打开一张票据,要求将
选项
作为第二个参数。