javascript - 在模块的构造方法中访问模板选项
问题描述
在Apostrophe中,我有一个自定义模块,我想将 Nunjucksapos.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/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 %}
解决方案
我通过不使用该getWidgetWrapperClasses
方法解决了这个问题,而是扩展了小部件包装模板并在其中覆盖了 Nunjucks 块。lib/modules/apostrophe-areas/views/widgetBase.html
如果您查看Apostrophe 的代码,这实际上是一种记录在案的方法。
我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 %}
推荐阅读
- javascript - 删除重复项,如果不重复,则更改其值
- cmake - 在 CMAKE 中替代 STREQUAL
- nginx - 如何防止 nginx 在此特定设置中重定向到 HTTPS?
- mongodb - MongoError:表达式 $in 正好需要 2 个参数。1 被传入。'{ $in: [
, ] }' 不工作 - go - chromedp 上的网络使用情况
- javascript - 如何根据来自 DOM 的值更改变量
- r - 为什么这两种方法在 OSM 对象中产生不同数量的方式?
- bash - Graylog , 在存储之前处理文件
- javascript - 如何将功能组件代码更改为类组件
- python - 过滤字典“喜欢”字符串