Событие связывания 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, но эти примеры показывают, что он работает.

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

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

Является beforeRemove это то, что вы ищете? Я не уверен, какое поведение вы хотите достичь. Пожалуйста, проверьте этот образец: http://jsfiddle.net/romanych/YWfV8/8/ Это то, что вы хотите или нет?

Другие вопросы по тегам