在Apostrophe中,我有一个自定义模块,我想将Nunjucks apos.area
调用中的一个选项传递给小部件本身的construct方法。具体来说,我想根据传递给模板中模块的选项来调整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/apostrophe-pages/views/pages/home.html
{% extends "layout.html" %}
{% block content %}
<div id="widgets">
{{ apos.area(data.page, "example", {
widgets: {
"example": {
width: "half"
}
}
}) }}
</div>
{% endblock %}
答案 0 :(得分:1)
我通过不使用getWidgetWrapperClasses
方法来解决此问题,而是扩展了小部件包装器模板并覆盖其中的Nunjucks块。如果您在Apostrophe的代码中查看lib/modules/apostrophe-areas/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 %}