В Apostrophe у меня есть собственный модуль, в котором я хотел бы передать параметр из вызова apos.area
apos.area 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/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
чтобы добавить extraWrapperClasses
классы, все время имея доступ к параметрам шаблона через data.options
.
{% extends "apostrophe-areas:widget.html" %}
{% block extraWrapperClasses %}column column-{{ data.options.width }}{% endblock %}
construct
вызывается, когда создается весь модуль, а не отдельный виджет, поэтому он никогда не увидит параметры, переданные вapos.area
для определенного виджета.getWidgetWrapperClasses
потенциально могут, но мы не думаем об этом, поэтому сейчас требуется только один аргумент; не стесняйтесь открыть билет, просяoptions
быть вторым аргументом.