在骨干集合中向上/向下移动模型

时间:2014-01-17 07:24:23

标签: jquery backbone.js

我试图通过点击按钮来改变骨干集合中模型的顺序。

我在我的代码中这样做:

collectionForJsonElement= Backbone.Collection.extend({
            //set model for collection
            model: modelForJsonElement,
            //set filterBy function to Collection
            filterBy: function(searchTerm) {
                filtered= this.filter(function(model) {
                    return ((model.get('text').toString()).indexOf(searchTerm.toString()) !== -1);
                });
                return new collectionForJsonElement(filtered);
            },
            //set moveUp function to Collection
            moveUp: function(model) { // I see move up as the -1
                var index = this.indexOf(model);
                if (index > 0) {
                    this.remove(model, {silent: true}); // silence this to stop excess event triggers
                    this.add(model, {at: index-1});
                }
            },
            //set moveDown function to COllection
            moveDown: function(model) { // I see move up as the -1              
                var index = this.indexOf(model);
                if (index < this.models.length) {
                    this.remove(model, {silent: true});
                    this.add(model, {at: index});
                }
            }
        });

当我试图向上移动时,它工作正常。我的模型索引位置正在改变-1。但是,当我试图向下移动时,我的模型将进入最后一个位置。

例如,在我的骨干系列中,我有3个型号

One
Two
Three

如果我选择三个,然后单击上移按钮,则集合中模型的新订单将更改为:

One
Three
Two

但是,如果我选择一个,然后单击下移按钮,模型的新订单将更改为:

Three
Two
One

我无法弄清楚为什么它不能正常工作。 有人能告诉我这里有什么问题吗?

1 个答案:

答案 0 :(得分:1)

我认为你正在将模型恢复到原来的位置。在你的moveDown方法中。

好吧,为什么不尝试交换模型的位置而不是删除它并将其添加回来?

moveUp: function(model) {
  var index = this.indexOf(model);

  if (index > 0){
    this.swap(index, index-1);
  }
},

moveDown: function(model) {
  var index = this.indexOf(model);

  if (index < this.models.length) {
    this.swap(index, index+1);
  }
},

swap: function (indexA, indexB) {
  this.models[indexA] = this.models.splice(indexB, 1, this.models[indexA])[0];
}

好吧我还在使用删除并在这里添加因为我们允许moveUp 第一个或moveDown最后一个。 :)

修改 我刚刚在你的原始代码中意识到你忽略了模型是第一个(在moveUp中)或最后一个(在moveDown中)的情况

更新了我的代码:)