Сегодня я столкнулся с подобной проблемой и смог решить ее для проблемы моей команды, заменив шаблон пользовательской привязкой, которая сначала очищает все данные ко и очищает контейнер перед рендерингом.
http://jsfiddle.net/igmcdowell/b7XQL/6/
Я использовал шаблон без контейнера, например:
<ul data-bind="alwaysRerenderForEach: { name: 'itemTmpl', foreach: items }"></ul>
и пользовательская привязка всегдаRerenderForEach:
ko.bindingHandlers.alwaysRerenderForEach = {
init: function(element, valueAccessor) {
return ko.bindingHandlers.template.init(element, valueAccessor);
},
update: function(element, valueAccessor, allBindings, viewModel, context) {
valueAccessor().foreach(); // touch the observable to register dependency
ko.utils.domData.clear(element); // This will cause knockout to "forget" that it knew anything about the items involved in the binding.
ko.utils.emptyDomNode(element); //Because knockout has no memory of this element, it won't know to clear out the old stuff.
return ko.renderTemplateForEach(valueAccessor().name, valueAccessor().foreach, {}, element, context);
}
};
Очевидно, что он немного запоздал как ответ на ваш запрос, но может помочь другим, кто включил это в поиск (как я).