如果我在页面上有一个列表,并且它使用knockout的foreach绑定来显示列表项,那么其他东西会更新DOM以添加额外的列表项。如果有任何方法我可以通过淘汰来检测DOM更改并更新其模型以将新项添加到observableArray中?
这是一个显示问题的小提琴......
function MyViewModel() {
this.items = ko.observableArray([
{ name: 'Alpha' }, { name: 'Beta' }, { name: 'Gamma' }, { name: 'Delta' }
]);
this.simpleShuffle = function() {
this.items.sort(function() {
return Math.random() - 0.5; // Random order
});
};
this.simpleAdd = function() {
$("#top").append("<li>New item</li>");
}
}
ko.applyBindings(new MyViewModel());
它有2个绑定到同一个observableArray的列表,单击addItem按钮,你可以看到DOM已更新为包含顶部列表中的新列表项,但我希望第二个列表也被更新,所有通过模型。
似乎淘汰赛忽略了它没有呈现的DOM元素,你可以通过点击随机播放按钮看到它,它会在那里留下新项目。我原以为它会删除它们并进行完全重新渲染。
请不要回答“只需将项目添加到observableArray”
答案 0 :(得分:1)
查看first link和第二个链接Interface MutationEvent
$('#top').bind('DOMNodeInserted DOMNodeRemoved', function () {
alert('Changed');
});
我希望它有所帮助。