如果我将一个项目添加到集合中,如何找到添加的位置? 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);
感觉黑客:(
有人可以就此提出自己的看法吗?
var myModel = new MyModel({some: "data"}); var myCollection = new MyCollection(); myCollection.add(myModel); var index = myCollection.indexOf(myModel);