1

假设我在主干中有一个集合,我希望能够找到给定元素的上一个和下一个元素。请假设元素可以动态删除和添加。

var MyModel=Backbone.Model.extend({
 nextElement: function(){
//????
},
previousElement:function(){
//?????
}
});

var MyCollectionType=Backbone.Collection.extend({
model:MyModel;
});
var collection=new MyCollectionType
4

2 回答 2

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);
  }
}

然而,这似乎是收藏应该有的问题,而不是模型nextElementpreviousElement您是否考虑过将这些功能放在集合上而不是模型上?

于 2012-04-09T21:23:22.580 回答
0

它被作为一个骨干问题进行了讨论

https://github.com/jashkenas/backbone/issues/136

林森

它可以是这样的你总是可以使用新的模型方法来解决这个问题:

getRelative: function(direction) {
    return this.collection.at(this.collection.indexOf(this) + direction);
}

因此,如果您通过 -1,它将获得前一个,而 1 将获得下一个。如果它没有找到任何东西,它将返回 -1。

于 2015-06-02T20:47:53.450 回答