コレクションにアイテムを追加した場合、追加された位置を見つけるにはどうすればよいですか?addに関するUnderscore.jsのドキュメントでは、これを実現する唯一の方法は、addイベントにバインドすることであると示唆しています。
他に方法はありますか?そうでない場合、コールバックからインデックスを取得するにはどうすればよいですか?私は次のコールバックを提供しようとしました:
foo:function(model, options) {
console.log("foo: " + options.index);
},
しかし、options.indexはundefined
です。私はこのコードでイベントにバインドします:
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に使用されるため、コンパレータ関数に関する限り、同じキーを持つ2つのオブジェクトは事実上同じオブジェクトです。
私は、CIDを使用して、オブジェクトが実際に既にソートされたコレクションで探しているオブジェクトであることを確認することを望んでいました*。しかしそうではないようです。考えられる解決策の1つは、コンパレータ関数を変更してCIDを含めることだと思います。
initialize: function() {
this.comparator = function(aModel) {
return aModel.get('key') + aModel.cid;
};
},
モデルは値に従って並べ替えられたままkey
ですが、次のコードは正しいインデックス位置を返します。
this.collection.sortedIndex(myModel, this.collection.comparator);
ハッキーだと感じます:(誰かがこれについて意見を述べることができますか?