KnockoutJS:observable如何跟踪UI变化?

时间:2014-05-08 09:58:15

标签: knockout.js

如果我有多个<ul>,每个都有自己的可拖动子<li>,我拖放列表之间的项目(也就是连接列表),KO怎么样跟踪这些变化?显然ViewModel没有跟踪变化,所以我想问题是如何跟踪它们?

HTML:

<section>
    <ul class="connected" data-bind="foreach: fieldsCol1" id="list1">
        <li data-bind="attr: {id: id}">New Field</li>
    </ul>
    <ul class="connected" data-bind="foreach: fieldsCol2" id="list2">
        <li data-bind="attr: {id: id}">New Field</li>
    </ul>
</section>

查看型号:

function VM() {
    this.fieldsCol1 = ko.observableArray([some array]);
    this.fieldsCol2 = ko.observableArray([some array]);
}

ko.applyBindings(new VM());

在上面的示例中,在list1list2之间移动项目并不反映在fieldsCol1fieldsCol2上。

顺便说一下,我正在使用一个允许上述DND行为的jQuery库。

1 个答案:

答案 0 :(得分:2)

这不是一个容易解决的问题:这些类库通常涉及从DOM中分离元素,并将它们插入到其他地方。可能他们在过程中克隆元素。这些类库并不知道Knockout创建的绑定,并且往往会搞砸它们。修补这不是一件容易的事。如需灵感,请查看Knockout可排序插件:http://github.com/rniemeyer/knockout-sortable