Мой коллега действительно решил это прошлой ночью, используя то, с чем мы играли, прежде чем я ушел домой.
Таким образом, вся «проблема» с событиями «afterRender», «afterAdd» и «beforeRemove» заключается в том, что они действуют по-разному в сочетании с привязкой «foreach». KnockoutJS достаточно хорош, чтобы рассказать вам об этом на их странице , но по какой-то причине он мне не понравился, пока я не увидел это на практике.
Что действительно работает, так это удалить всю привязку «foreach» и использовать родную привязку «data» Knockout следующим образом:
data-bind="template: { name: 'item-template', data: items, afterRender: caller }"
Тогда «afterRender» работает именно так, как следует из названия.
У меня сложилось впечатление, что вы не можете выполнить итерацию коллекции и отобразить новый пользовательский интерфейс без foreach, но эти примеры показывают, что она работает.
Я сделал пример для обоих стилей ViewModel, потому что иногда мне нужен один или другой.
Спасибо за помощь, Дэн !!