Событие связывания KnockoutJS после рендеринга шаблона - PullRequest
17 голосов
/ 16 февраля 2012

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

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

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

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

Я просто хочу, чтобы одно событие сработало после того, как шаблон завершил рендеринг.

Ответы [ 2 ]

29 голосов
/ 16 февраля 2012

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

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

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

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

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

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

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

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

0 голосов
/ 16 февраля 2012

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

...