Nockoutjs Bind Event после визуализации шаблона
-
25-10-2019 - |
Вопрос
Я искал некоторое время, и я уверен, что это новый вопрос, а не повторение, как следует из названия. :)
По сути, я пытаюсь выяснить, существует ли можно, что событие, которое создает Nockoutjs, создает после шаблона при использовании чего-то вроде шаблонов jQuery.
Я бы использовал встроенный «Afterrender», но я обнаружил, что он не стреляет, если наблюдаемый массив очищен. Я построил эту демонстрацию, чтобы проиллюстрировать эту проблему: http://jsfiddle.net/farina/ywfv8/1/.
Кроме того, я знаю, что могу написать пользовательский обработчик ... но это кажется действительно ненужным для того, что мне нужно.
Я просто хочу одно событие, которое стреляет после того, как шаблон завершил рендеринг.
Решение
Мой коллега на самом деле решил прошлой ночью, используя то, с чем мы играли до того, как я пошел домой.
Таким образом, вся «проблема» с событиями «Afterrender», «AfterAdd» и «BeforeRemove» заключается в том, что они действуют по -разному в сочетании с обязательностью «Foreach». Nockoutjs достаточно хорош, чтобы рассказать вам об этом на их страница, но по какой -то причине это на самом деле не погрузилось для меня, пока я не увидел это на практике.
Что действительно работает, так это то, чтобы отказаться от всего «foreach» привязки и использовать нативные «данные» нокаута «привязаны», как это:
data-bind="template: { name: 'item-template', data: items, afterRender: caller }"
Затем «Последний» работает точно так же, как следует из названия.
У меня сложилось впечатление, что вы не смогли повторить коллекцию и представить новый пользовательский интерфейс без Foreach, но эти примеры иллюстрируют, что она работает.
http://jsfiddle.net/farina/kufx2/1/ (Используя виду массива объектов)
http://jsfiddle.net/farina/qtzm2/1/ (Используя функциональный стиль ViewModel)
Я сделал пример для обоих стилей ViewModel, потому что иногда мне нужен один или другой.
Спасибо за помощь, Дэн !!
Другие советы
Является beforeRemove
Что вы ищете? Я не уверен, какого поведения вы хотите достичь. Пожалуйста, проверьте этот пример: http://jsfiddle.net/romanych/ywfv8/8/Это то, что вы хотите или нет?