Knockout可以用脏旗子排序。还原脏物品时还原可排序的顺序

时间:2013-09-25 09:08:41

标签: knockout.js knockout-sortable

我对淘汰赛有点新意,但在谷歌的帮助和堆栈溢出的情况下,我设法找到了我需要的部分。我似乎无法让他们一起工作。

所以我在这里或他的网站上发布了RP Niemeyer的代码作为答案。 我正在使用淘汰可排序,脏标志和观察可排序项目的索引。

我正在寻找的是一种在我还原脏项时使可排序更新的顺序。我的对象的索引属性将被还原,但可排序区域中的项目顺序不会根据恢复的值进行更新。

以下是a fiddle的问题示例。

如果将“第1项”移动到“第2项”之后,您将看到两个项目都变脏(应该如此)。然后单击“恢复”按钮。注意“订单”项目如何更新,但不能更新它们在可排序项中的顺序。

为了使情况更糟(这有点是问题的副作用),将“第3项”移到“第4项”之后,你会看到现在第1项到第4项被标记为脏。

这是因为还原脏项时可重置项目的顺序没有被重置。 “项目1”的订单可观察值为0,但它在可排序的索引1中。因此,代码再次标记为脏。

如果有人可以指出我需要改变什么以使其按照我想要的方式工作,我将非常感激。

The code is quite lengthy and I wouldn't know which part to post here, but apparently I need a code block to be allowed to post my fiddle link. :(

提前致谢, 卢德维格

1 个答案:

答案 0 :(得分:0)

使用您当前的结构,我认为您可以在视图模型级revertItem函数中添加几行,以便按“正确”顺序将项目放回原位。类似的东西:

    self.revertItem = function (preset) {
        $.each(preset.dirtyItems(), function (index, item) {
            item.revert();
        });

        //new code added to sort based on order
        self.items.sort(function(a, b) {
            return a.order() > b.order() ? 1 : -1; 
        });
    };     

更新了小提琴:http://jsfiddle.net/rniemeyer/d2e5c/