あなたは文書化されていない機能を使用しなくても、あなたが望むようにこれを行うことはできません。
我々はCollection#add
を見てみると、私たちはこの表示されます:
add: function(models, options) {
//...
for (i = 0, l = add.length; i < l; i++) {
(model = add[i]).trigger('add', model, this, options);
}
//...
}
はtrigger
の4番目の引数に注意してください。そして、私たちはtrigger
のための文書化インタフェースを見れば:与えられたイベント、またはイベントのスペースで区切られたリストのための
トリガーをobject.trigger(event, [*args])
トリガーのコールバック。 トリガーの引き続く引数は、イベントコールバックに渡されます。
のでadd
はoptions
はあなたがCollection#add
に渡されたものを同じoptions
あるf(model, collection, options)
としてリスナーを呼び出します。
this.collection.add(predefinedModel, { undocumented: 'arguments' })
その後、あなたはコールバックでこれを行うことができます:結果は、あなたがこれを行う場合ということです
triggerthis: function(model, collection, options) {
console.log(options.undocumented);
}
デモ:http://jsfiddle.net/ambiguous/bqWwQ/
あなたは可能性があり、もちろんトンネルの配列全体またはオブジェクトを介してoptions
この方法。
が
ユビキタスoptions
引数は以下のようになります。
"add"
イベントのための第三引数は、(少なくとも私は見つけることができること)、このための文書に最も近いものは0.3.3 Changelog entryでノートがあり、文書化されていませんすべての"change"
イベントに最終的な引数として渡されます。
私はこのアプローチをお勧めしませんが、必要に応じてそこにあります。もちろん、これをテストスイートでカバーする必要があり、バックボーンが使用するoptions
のキーを使用しないようにする必要があります。
model.baggage = { some: 'extra stuff };
、その後、コールバックでそれをはがし:
triggerthis: function(model, collection) {
var baggage = model.baggage;
delete model.baggage;
//...
}
デモ:http://jsfiddle.net/ambiguous/M3UaH/
より安全なアプローチは、モデルにいくつかの余分な性質を付けることであろう
異なる目的のために異なるコールバックを使用することもできますし、余分なパラメータを渡すこともできます完全なモデル属性として吹き飛ばす。
あり_.bind
もあります:
this.collection.on("add", _.bind(function(collection, model, extra) { ... }, context, collection, model, 'whatever you want'));
しかし、あなたはあなたのコールバックが必要になりますすべての引数を指定する必要がありますので、それは左から右に引数をバインドします。
デモ:あなたはそれらの余分の引数から来る期待しますhttp://jsfiddle.net/ambiguous/jUpJz/ `triggerthis`イベントハンドラがバックボーンイベントコードによって呼び出されますので
、? –
申し訳ありませんが、私はどのようにこの作品がわかりません。私は、内部でtriggerを呼び出すon()の無名関数を呼び出すことができると思いますが、これが良い方法であるかどうかはわかりません。 – chenglou