Событие связывания KnockoutJS после рендеринга шаблона
Я долго искал, и я уверен, что это новый вопрос, а не повторение, как предполагает название.:)
По сути, я пытаюсь выяснить, существует ли событие с возможностью подписки, которое KnockoutJS создает после рендеринга шаблона при использовании чего-то вроде шаблонов jQuery.
Я бы использовал встроенный "afterRender", но я обнаружил, что он не срабатывает, если очищается наблюдаемый массив. Я создал эту демонстрацию, чтобы проиллюстрировать эту проблему: http://jsfiddle.net/farina/YWfV8/1/.
Кроме того, я знаю, что мог бы написать собственный обработчик... но это кажется действительно ненужным для того, что мне нужно.
Я просто хочу одно событие, которое запускается после того, как шаблон заканчивает рендеринг.
2 ответа
Мой коллега на самом деле решил это прошлой ночью, используя то, с чем мы играли, прежде чем я пошел домой.
Таким образом, вся "проблема" с событиями "afterRender", "afterAdd" и "beforeRemove" заключается в том, что они действуют по-разному в сочетании с привязкой "foreach". KnockoutJS достаточно хорош, чтобы рассказать вам об этом на своей странице, но по какой-то причине он на самом деле не запал мне, пока я не увидел это на практике.
Что действительно работает, так это удалить всю привязку "foreach" и использовать родную привязку "data" Knockout следующим образом:
data-bind="template: { name: 'item-template', data: items, afterRender: caller }"
Тогда "afterRender" работает именно так, как следует из названия.
У меня сложилось впечатление, что вы не можете выполнить итерацию коллекции и отобразить новый пользовательский интерфейс без foreach, но эти примеры показывают, что он работает.
http://jsfiddle.net/farina/kuFx2/1/ (с использованием стиля массива объектов ViewModel)
http://jsfiddle.net/farina/QtZm2/1/ (с использованием стиля функции ViewModel)
Я сделал пример для обоих стилей ViewModel, потому что мне иногда нужно одно или другое.
Спасибо за помощь, Дэн!
Является beforeRemove
это то, что вы ищете? Я не уверен, какое поведение вы хотите достичь. Пожалуйста, проверьте этот образец: http://jsfiddle.net/romanych/YWfV8/8/ Это то, что вы хотите или нет?