当前位置 : 主页 > 网络推广 > seo >

检索添加到Backbone.js集合中的项目的索引位置

来源:互联网 收集:自由互联 发布时间:2021-06-16
如果我将一个项目添加到集合中,如何找到添加的位置? Underscore.js documentation for add建议通过绑定到add事件来实现此目的的唯一方法. 还有什么办法吗 如果没有,那么我如何从我的回调中
如果我将一个项目添加到集合中,如何找到添加的位置? Underscore.js documentation for add建议通过绑定到add事件来实现此目的的唯一方法.

还有什么办法吗
如果没有,那么我如何从我的回调中得到索引呢?我试着提供一个回调:

foo:function(model, options) {
  console.log("foo: " + options.index);
},

但是options.index是未定义的.我用这个代码绑定到事件:

this.collection.bind('add', this.foo);

并添加一个包含此代码的项目:

this.collection.add(myNewItem);

集合中的模型是:

MyModel = Backbone.Model.extend({
defaults : {
   key:undefined,
   myObj:undefined,
},

收藏是:

MyModel List = Backbone.Collection.extend({
      model: MyModel,

initialize: function() {
   this.comparator = function(aModel) {
   return aModel.get('key'); 
  };
 }});

我将模型添加到集合中:

var key = "always_the_same";
var mm = new MyModel({key:key});
this.collection.add(mm);
var index = this.collection.sortedIndex(mm , this.collection.comparator));

更新

问题是(我想),比较器函数用于indexOf和sortedIndexOf,因此与比较函数相关的两个具有相同键的对象实际上是相同的对象.

我曾经希望* CID将用于确保对象实际上是我在已经排序的集合中寻找的对象.但是似乎没有.我想一个可能的解决方案是更改我的比较器功能以包括CID:

initialize: function() {
        this.comparator = function(aModel) {
          return aModel.get('key') + aModel.cid; 
        };
      },

这些模型根据其键值保持排序,但以下代码返回正确的索引位置:

this.collection.sortedIndex(myModel, this.collection.comparator);

感觉黑客:(
有人可以就此提出自己的看法吗?

如果您正在处理使用add方法将模型添加到集合的简单方案,则只需在添加该模型之后,调用该模型的indexOf方法即可.

var myModel = new MyModel({some: "data"});

var myCollection = new MyCollection();
myCollection.add(myModel);

var index = myCollection.indexOf(myModel);
网友评论