Использование шаблонов макетов в граненых видах в Plone 5

Когда я использую любой макет, как <span class="pat-moment">2016-07-30T15:10:00</span> в faceted:view (пользовательское представление для eea.facetednavigation) шаблон вообще не работает, так как содержимое внедряется с помощью javascript.

В /questions/16439635/vidzhetyi-maketyi-plone5-takie-kak-pat-pickadate-ne-rabotayut-dlya-dinamicheski-generiruemogo-kontenta/16439653#16439653 @ebrehault пишет, что шаблоны инициализируются во время загрузки, и если DOM изменяется и содержит новые элементы, вам необходимо вызвать Registry.scan($('#content-core')) где Registry является pat-registry а также #content-core вставленная часть страницы.

Как мне это сделать в контексте eea.facetednavigation ( https://github.com/eea/eea.facetednavigation)? Он использует систему событий (см. https://github.com/eea/eea.facetednavigation/blob/master/eea/facetednavigation/browser/javascript/view.js). Как мне прослушать одно из этих событий, какое мне нужно, и как мне тогда вызвать сканирование?

2 ответа

Решение

Вам необходимо привязаться к событию EJA AJAX_QUERY_SUCCESS:

$(Faceted.Events).bind(Faceted.Events.AJAX_QUERY_SUCCESS, function() {
        Registry.scan($('#content-core'));
});

Примечание: когда вы сказали:

и #content-core - внедренная часть страницы.

это не совсем точно, это не определенная цель инъекции (кстати, не всегда есть инъекция, когда вы используете шаблоны, в вашем случае инъекцией управляет eea.faceted, который не является шаблоном). Вы можете повторно отсканировать любую часть DOM, вам просто нужно убедиться, что пересканируемая часть содержит шаблоны, которые вы хотите активировать (body было бы хорошо, например).

Для Plone 5: я зарегистрировал приведенный ниже фрагмент кода как ресурс в registry.xml в моем аддоне, включил его в аддон bundles в моем registry.xml и перестроил пакет addons с помощью скрипта ./bin/plone-compile-resources.,

define([
    'pat-registry'
], function(Registry) {
  'use strict';
    $(Faceted.Events).bind(Faceted.Events.AJAX_QUERY_SUCCESS, function() {
      Registry.scan($('#content-core'));
    });
});
Другие вопросы по тегам