Событие привязки KnockoutJS после рендеринга шаблона

Я искал какое-то время, и я почти уверен, что это новый вопрос, а не повторение как следует из названия. :)

По сути, я пытаюсь выяснить, есть ли событие с возможностью подписки, которое KnockoutJS создает после рендеринга шаблона при использовании чего-то вроде шаблонов jQuery.

Я бы использовал встроенный «afterRender», но я обнаружил, что он не срабатывает, если очищается наблюдаемый массив. Я создал эту демонстрацию, чтобы проиллюстрировать эту проблему: http://jsfiddle.net/farina/YWfV8/1/ .

Кроме того, я знаю, что могу написать собственный обработчик ... но это кажется совершенно ненужным для того, что мне нужно.

Мне просто нужно одно событие, которое запускается после завершения рендеринга шаблона.

17
задан Suresh Kamrushi 29 March 2013 в 07:03
поделиться

1 ответ

Мой коллега действительно решил это прошлой ночью, используя то, с чем мы играли, прежде чем я пошел домой.

Таким образом, вся «проблема» с событиями «afterRender», «afterAdd» и «beforeRemove» заключается в том, что они действуют по-разному в сочетании с привязкой «foreach». KnockoutJS достаточно хорош, чтобы рассказать вам об этом на их странице , но по какой-то причине он на самом деле мне не понравился, пока я не увидел это на практике.

Что действительно работает, так это удалить всю привязку «foreach» и использовать родную привязку «данных» Knockout следующим образом:

data-bind="template: { name: 'item-template', data: items, afterRender: caller }"

Тогда «afterRender» работает именно так, как следует из названия.

У меня сложилось впечатление, что вы не можете выполнить итерацию коллекции и создать новый пользовательский интерфейс без foreach, но эти примеры показывают, что он работает.

Я сделал пример для обоих стилей ViewModel, потому что иногда мне нужен один или другой.

Спасибо за помощь, Дэн!

29
ответ дан 30 November 2019 в 12:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: