假设我在骨干中有一个集合,我希望能够找到给定元素的前一个和下一个元素。请假设可以动态删除和添加元素。
var MyModel=Backbone.Model.extend({
nextElement: function(){
//????
},
previousElement:function(){
//?????
}
});
var MyCollectionType=Backbone.Collection.extend({
model:MyModel;
});
var collection=new MyCollectionType
答案 0 :(得分:13)
将模型添加到集合时,collection
属性将添加到引用其所在集合的模型中。您可以在nextElement和previousElement方法中使用此属性。
var MyModel = Backbone.Model.extend({
initialize: function() {
_.bindAll(this, 'nextElement', 'previousElement');
},
nextElement: function() {
var index = this.collection.indexOf(this);
if ((index + 1) === this.collection.length) {
//It's the last model in the collection so return null
return null;
}
return this.collection.at(index + 1);
},
previousElement: function() {
var index = this.collection.indexOf(this);
if (index === 0 ) {
//It's the first element in the collection so return null
return null;
}
return this.collection.at(index - 1);
}
}
但是,nextElement
和previousElement
似乎是集合应该拥有的而不是模型。您是否考虑过将这些功能放在集合而不是模型上?
答案 1 :(得分:0)
它被讨论为骨干问题
https://github.com/jashkenas/backbone/issues/136
林森
可能是这样的 您总是可以使用新的模型方法来解决这个问题:
getRelative: function(direction) {
return this.collection.at(this.collection.indexOf(this) + direction);
}
所以,如果你传递-1,它将获得前一个,1将获得下一个。如果找不到任何东西,它将返回-1。