2012-07-03 4 views
5

.on()を使用して複数のイベントをバインドするときに、バックボーンコレクションでどのイベントがトリガーされるのかを知るにはどうすればよいですか?明確にするために、次の例を参照してください。 、あなたがそうするためにtriggerメソッドをオーバーライドする必要がありますバックボーンコレクションの複数のイベントに対して.on()を使用する場合のイベント名の取得。

var Car = Backbone.Model.extend({ 
    nrOfWheels: 4, 
    color: 'red', 
    speed: 'slow' 
}); 

var Garage = Backbone.Collection.extend({ 
    model: Car 
}); 

var myGarage = new Garage(), 
    myCar = new Car(); 

myGarage.on('add change reset', function() { 
    // How do I know what event was triggered? 
    console.log('add change reset', arguments); 
}); 

myGarage.on("all", function() { 
    // In here, the name of the event is the first argument. 
    console.log('all', arguments); 
}); 

// Trigger add 
myGarage.add(myCar); 

// Trigger change 
myCar.set('speed', 'fast'); 

// Trigger reset 
myGarage.reset(); 

答えて

0

をコードを見てい:(http://jsfiddle.net/PURAU/3/もjsFiddleを参照してください):私たちがあたり、特定のアクションをしたい場合は

https://github.com/documentcloud/backbone/blob/master/backbone.js#L148

+0

ご回答ありがとうございます。 –

+0

バックボーンソース状態のトリガー機能についてのコメント "1つまたは複数のイベントをトリガーし、すべてのバインドされたコールバックを起動します。コールバックには、イベント名とは別に' trigger'と同じ引数が渡されます。なぜイベント名を送るのがいいのかわかりません。あなたは正当な理由を見ますか? –

+0

'all'イベントの場合だけでなく、 –

1

をあなたがリスナーの中でそれを呼び出すように変更したときに全体的な変更リスナーを持ち、あなた自身でイベント名を指定したい場合にも、最も順序付けられた方法はすべてを聴くことです。

myGarage.on('add', function() { 
    yourGlobalFunction(arguments, 'add'); 
    //specific actions for add 
}); 
myGarage.on('change', function() { 
    yourGlobalFunction(arguments, 'change'); 
    //specific actions for change 
}); 
myGarage.on('reset', function() { 
    yourGlobalFunction(arguments, 'reset'); 
    //specific actions for reset 
}); 

function yourGlobalFunction(prevArguments, eventName){ 
    log(prevArguments, eventName); 
} 
+2

あなたの答えDanielに感謝します。これは私が現在行っていることであり、手元の問題を解決します。私はよりドライソリューションを探していました。私はmyGarage.on( 'add change reset'、...)を試してみましたが、イベント名を取得できなかったことに驚いていました。 –

+0

トリガーメソッドをオーバーライドするのは、私が欲しいものを得る唯一のソリューションだと思います。 :/ –

+0

これは2015年の夏で、これよりも良い方法はわかりませんが、私はバックボーンを数ヶ月使っています –

関連する問題