Доступ к параметрам шаблона в методе построения модуля

1

В 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 %}
Теги:
nunjucks
apostrophe-cms

1 ответ

1
Лучший ответ

Я решил это, не используя метод 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 %}
  • 1
    Хорошее решение construct вызывается, когда создается весь модуль, а не отдельный виджет, поэтому он никогда не увидит параметры, переданные в apos.area для определенного виджета. getWidgetWrapperClasses потенциально могут, но мы не думаем об этом, поэтому сейчас требуется только один аргумент; не стесняйтесь открыть билет, прося options быть вторым аргументом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню