まず第一に、私はいくつかの検索を行いましたが、stackoverflow/googleで答えがありませんでした。
これが私のコードのスニペットです:
//in the view
this.collection.on("add",triggerthis)
this.collection.add(predefinedModel)
triggerthis: function(a, b, c, d){
//etc.
}
基本的に、addで引数を渡し、triggerthisで引数を受け取ることができるようにしたいと思います。これは可能ですか?
前もって感謝します。
文書化されていない機能を使用せずに、これを希望どおりに行うことはできません。
_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])
指定されたevent、またはスペースで区切られたイベントのリストに対してコールバックをトリガーします。 triggerへの後続の引数は、イベントコールバックに渡されます。
したがって、add
はリスナーをf(model, collection, options)
として呼び出します。ここで、options
は_Collection#add
_に渡したものと同じoptions
です。その結果、これを行うと次のようになります。
_this.collection.add(predefinedModel, { undocumented: 'arguments' })
_
次に、コールバックでこれを行うことができます。
_triggerthis: function(model, collection, options) {
console.log(options.undocumented);
}
_
デモ: http://jsfiddle.net/ambiguous/bqWwQ/
もちろん、この方法でoptions
を介して配列またはオブジェクト全体をトンネリングすることもできます。
_"add"
_イベントの3番目の引数は文書化されていません(少なくとも私が見つけることはできません)。これに関する文書化に最も近いのは .3.3変更ログエントリ のメモです:
ユビキタスな
options
引数が、すべての_"change"
_イベントの最終引数として渡されるようになりました。
このアプローチはお勧めしませんが、必要に応じて利用できます。もちろん、これをテストスイートでカバーする必要があり、Backboneが使用する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'));
_
ただし、引数は左から右にバインドされるため、コールバックに必要な引数をall指定する必要があります。
関数に渡される値が常に同じである場合は、 部分的に適用_.bind
(または可能な場合はネイティブのFunction.bind
)を使用してそれを行うことができます。
例えば。ハンドラーをadd
にバインドする場所(triggerThis
がビュー内のメソッドであると想定):
this.collection.on('add', _.bind(this.triggerThis, this, a, b, c, d));
triggerThis
の定義:
triggerThis: function(a, b, c, d /*, model, collection, options - if you need them*/) {
...
}
individualadd呼び出しに引数を渡したい場合は、2番目のoptions
パラメーターをadd
に使用して次に、イベントハンドラーでそれを処理します。
例えば。
this.collection.on('add', this.triggerThis, this);
this.collection.add(model, {
someCustomValue: 'hello';
});
次に、ハンドラーで:
triggerThis: function(model, collection, options) {
var val = options.someCustomValue;
...
}