7

相关问题 -

BackboneJS 重新排列集合中模型的最佳方法,同时为每个模型保持 0 索引的序数属性

如何在集合中移动模型?

我有一个 Backbone 集合,在列表中直观地表示。此列表是可拖放的。任何项目都可以移动到集合中的任意位置(即 - 不是排序)。我已经看到了一些使用集合的本机删除/添加将模型放置在正确位置的示例。但是,Backbone 在添加模型时内部调用 set,然后调用一堆与事件相关的方法并在最后对其进行排序。将模型拼接到正确的位置有什么缺点吗?

删除/添加:请参阅第一个链接问题中的示例。

拼接:第二个例子

我目前正在使用的功能:

    moveTo: function(oldIndex, newIndex){
        oldIndex = oldIndex instanceof Backbone.Model ? this.at(oldIndex) : oldIndex;
        var spliced = this.models.splice(oldIndex, 1);
        this.models.splice(newIndex, 0, spliced[0]);
        this.trigger("move",[oldIndex,newIndex]);
    },
4

1 回答 1

13

我为我最近的项目编写了这个解决方案。它似乎与您描述的界面相似 - 可排序列表。此方法绑定到集合。

reorder: function(new_index, original_index) {
    // If nothing is being changed, don't bother
    if (new_index === original_index) return this;
    // Get the model being moved
    var temp = collection.at(original_index);
    // Remove it
    collection.remove(temp);
    // Add it back in at the new index
    collection.add(temp, { at: new_index });
    return this;
}

我自己的大部分代码已被删除,但这是核心功能。Backbone 的at选项使这非常容易。

于 2013-08-21T18:55:07.757 回答