我想为两个事件注册一个侦听器,并确定触发了哪个事件。
// how do I determine which event fired?
this.listenTo( Backbone, 'minimize maximize', function( data ){
console.log( 'minimize or maximize called, but which one?' );
/*
if( minimize )
doStuff();
if( maximize )
doOtherStuff();
*/
});
我知道这可以分为两个听众:
this.listenTo( Backbone, 'minimize', callbackOne);
this.listenTo( Backbone, 'maximize', callbackTwo);
但我想知道第一种方式是否可行?
答案 0 :(得分:3)
这样做的一种方法是使用魔法"所有"事件处理所有事件,然后根据事件名称进行区分:
this.listenTo( Backbone, 'all', function(event_name, data ){
if( event_name == "minimize" )
doStuff();
if( event_name == "maximize" )
doOtherStuff();
});
当然,这不是最佳选择,因为这会在所有事件上触发,这会给您的应用程序增加不必要的开销。
但是,也许您会发现使用地图语法更好:
function handlerForMaximize(data){
// Do something useful here
}
function handlerForMinimize(data){
// Do something useful here
}
this.listenTo( Backbone, {
"maximize" : handlerForMaximize,
"minimize" : handlerForMinimize
});
如果你坚持使用单一功能,你可以这样做(需要underscore.js
):
function myHandler(event_name, data){
if(event_name == "maximize"){
// Do something useful
}
if(event_name == "mimimize"){
// Do something useful
}
}
this.listenTo( Backbone, {
"maximize" : _.partial(myHandler, "maximize"),
"minimize" : _.partial(myHandler, "minimize")
});