これは の関数シグネチャですon:
object.on(イベント、コールバック、[コンテキスト])
event「クリック」のようなイベント名か、次のようなイベント マップのいずれかです。
{
'click .button': 'handler1',
'keydown': function(){}
}
したがって、listenTo投稿したコード内の最初の引数は、イベント名またはイベント マップです。イベント名 (タイプ "string") の場合は、指定されたコールバックを 2 番目のパラメーターとして on に渡します。nameがイベント マップ (タイプ「オブジェクト」) である場合、バックボーンがthis通過します。コールバックとして渡されたとしても、最終的にはコンテキストとして使用されます。
eventsApi関数と、それがどのように呼び出されるかを見てみましょうon:
function(obj, action, name, rest) {
if (!name) return true;
if (typeof name === 'object') {
for (var key in name) {
obj[action].apply(obj, [key, name[key]].concat(rest));
}
}
// ... code in `on`:
eventsApi(this, 'on', name, [callback, context]) && callback)
はイベント マップであると仮定nameします (したがってtypeof name ==='object'、真です)。イベント マップの各メンバーに対して、on次の引数を使用して呼び出します[key, name[key]].concat(rest)。なので、4 つの引数を取得しますrest。[callback, context]
しかし、それは受け入れるよりも 1 つ多くon、最後の 1 つは . ではなくコンテキストである必要がありますcallback。listenToがオブジェクトをコールバックとして渡しthis、イベント ハンドラーのコンテキストにするのはそのためです。
listenToはかなり新しいメソッドなので、変数名が意味をなさないのはそのためだと思います。
ビューが削除されると (おそらくモデルの削除後)、removeメソッドはstopListeningビューを呼び出します。off引数を渡さない場合、その関数はすべてのハンドラーを呼び出すだけです。
for (var id in listeners) {
listeners[id].off(null, null, this);
}