在集合中移动骨干模型的最佳实践

时间:2013-08-17 19:42:51

标签: javascript backbone.js backbone-collections

相关问题 -

BackboneJS best way to rearrange models in a collection while maintaining 0-indexed ordinal property for each model

How can I move a model within a collection?

我有一个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]);
    },

1 个答案:

答案 0 :(得分:12)

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

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选项使这很容易。