Knockout可排序列表无法通过添加的新项目进行抵消

时间:2013-01-10 16:44:00

标签: jquery-ui knockout.js jquery-ui-sortable knockout-sortable

当我将项目添加到我的列表中时(通过单击“添加系列”按钮),会导致我的列表无法正确排序。例如。如果我单击“添加系列”按钮,然后尝试在“trrde”和“1”之间移动“seriesname232”,那么它将向下移动一个(在“1”下面)。我认为这是因为可排序列表没有考虑到添加了某些内容。以下是一个例子:

http://jsfiddle.net/thebassix/yTAXh/

<div id="results">
            ---Hidden---
            <ul id="hidden" data-bind="sortable: { data: hiddenSeries, afterMove: hide}">
                <li data-bind="visible: Hidden, text: Name"></li>
            </ul>

    ---Unhidden---         
            <ul id="unhidden" data-bind="sortable: { data: unhiddenSeries, afterMove: unhide}">
                <li data-bind="visible: !Hidden(), text: Name"></li>
            </ul>
</div>
<hr/>
<div>All</div>
<ul data-bind="foreach: series">
    <li>
        <span data-bind="text: Name"></span> - 
        (<span data-bind="text: Hidden"></span>)
    </li>
</ul>
<input id="btnAddSeries" data-bind="click: addSeries" title="Add Series" class="ews_button" type="button" value="Add Series" />

1 个答案:

答案 0 :(得分:0)

问题是您添加的Series对象具有_destroy作为可观察对象。通常,_destroy只是一个普通属性,因为KO的destroy函数将其设置为普通属性。

因此,如果您未在_destroy构造函数中使Series成为可观察对象,则会解决您的问题:

self._destroy = data._destroy;

更新了示例:http://jsfiddle.net/rniemeyer/63rup/

此外,我刚刚在sortable插件中添加fix,无论如何都要解包_destroy,所以这不会有问题。