我试图通过点击按钮来改变骨干集合中模型的顺序。
我在我的代码中这样做:
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
我无法弄清楚为什么它不能正常工作。 有人能告诉我这里有什么问题吗?
答案 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中)的情况
更新了我的代码:)