backbone.js:从集合中删除后保留一个元素

时间:2012-12-06 05:33:42

标签: javascript collections backbone.js models

我正在尝试根据UI中的拖放事件(从一个“框”到另一个)在两个集合之间移动模型。现在,当我从原始集合中删除元素时,它显然不再存在,因为它也没有出现在新集合中(如果我注释掉删除,其他集合中的外观工作)。

我有直觉认为这是因为每个模型对应一个服务器端集合并从集合中删除某些东西通常甚至会回到服务器来杀死它。然而,在这里,我希望我的模型更加自由浮动。那可能吗?我错误地使用了Backbone吗?

更新

好的,这是我的代码的摘录。如果有必要,我可以创建一个小提琴,但也许这有助于突出发生了什么:

    drop: function(event, ui) {
        var item = ui.draggable.data("model");
        newcollection.add(item);
        console.log(item);
        oldcollection.remove(item);
        console.log(item);
    }

现在,控制台输出如下所示:

d {attributes: Object, _escapedAttributes: Object, cid: "c83", changed: Object, _silent: Object…}

d {_previousAttributes: Object, _pending: Object, _escapedAttributes: Object, changed: Object, _silent: Object…}
显然,模型本身已经发生变化,而除了从集合中删除之外别无其他。我现在看到它实际上并没有“停止存在”但仍然 - ?

2 个答案:

答案 0 :(得分:3)

从集合中删除模型不会从服务器中删除该模型。这就是model.destroy()的作用。 Here's the source of Collection.remove。如果对骨干有疑问,请直接前往源头。它很小,很容易阅读和理解。

您的代码中可能有其他错误,但我们需要一个代码示例或jsfiddle来帮助您找到它。

答案 1 :(得分:0)

事实证明我需要改变添加和删除的顺序;否则,对于旧的和新的触发UI对应元素的移除...感谢评论,但帮助推动我走向正确的方向。