Использование шаблонов макетов в граненых видах в 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'));
});
});