Я оценивал множество различных шаблонизаторов JS на стороне клиента (doT, parrot, dust.js, микрошаблоны, подчеркивание и т. д.). Все они работают одинаково, используя некоторые типы тегов для представления данных, а некоторые дают возможность встраивать в шаблон чистый JS, включая циклы, если/то и т. д. Однако все они работают путем преобразования самого шаблона в строку. , затем в javascript для интерполяции переменных, выполнения циклов и т. д.
Когда происходит это преобразование, все обработчики событий, которые были прикреплены к исходным объектам в шаблоне (т. е. созданные jQuery в document.ready), конечно же, теряются. Чтобы добавить эти обработчики обратно в результирующий HTML, потребуется вернуться и повторно применить любые такие обработчики событий после каждого рендеринга шаблона.
Я пытаюсь придумать способ создания механизма шаблонов с полной поддержкой javascript, но который сохраняет любые события, прикрепленные к шаблону перед клонированием.
Представьте себе сценарий, в котором шаблон предназначен для списка элементов. Каждый элемент включает в себя кнопки, которые выполняют определенные задачи для этого элемента (например, редактировать, удалять, переименовывать, копировать, вы поняли).
Чтобы сделать код чистым и простым в сопровождении, имеет смысл применить события Click к этим кнопкам в шаблоне HTML в document.ready(). Затем каждый раз, когда шаблон клонируется для нового элемента списка, события также клонируются.
Однако с текущими библиотеками шаблонов все события теряются на этапе клонирования, что требует применения всех событий к клонируемому объекту каждый раз при обновлении списка. Если это оперативные данные или если пользователь добавляет новые элементы в список, кажется, что будет очень сложно отслеживать события и обеспечивать их правильное присоединение каждый раз при добавлении элемента.
Я знаю, что в jQuery есть функция clone(), которая клонирует события, и это отлично работает для базовых шаблонов, но когда вы пытаетесь включить в шаблон произвольный javascript, это становится непрактичным.
Я стараюсь избегать шаблонов, которые зависят от атрибутов элемента html для настройки циклов, решений и т. д., потому что код шаблона становится очень уродливым. Желателен чистый шаблон с простыми тегами для подстановки данных, простыми циклами JS for для повторяющихся элементов и простыми ссылками на исходные данные.
У кого-нибудь есть идеи, как это сделать?
Спасибо!