Knockout 2方式foreach绑定DOM更改更新模型

时间:2013-05-01 16:17:57

标签: data-binding knockout.js

如果我在页面上有一个列表,并且它使用knockout的foreach绑定来显示列表项,那么其他东西会更新DOM以添加额外的列表项。如果有任何方法我可以通过淘汰来检测DOM更改并更新其模型以将新项添加到observableArray中?

这是一个显示问题的小提琴......

http://jsfiddle.net/BGdWN/1/

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”

1 个答案:

答案 0 :(得分:1)

查看first link和第二个链接Interface MutationEvent

See Fiddle

$('#top').bind('DOMNodeInserted DOMNodeRemoved', function () {
    alert('Changed');
});

我希望它有所帮助。