Backbone - listenTo多个事件并确定触发了哪个事件

时间:2016-01-19 16:38:47

标签: javascript backbone.js

我想为两个事件注册一个侦听器,并确定触发了哪个事件。

// 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);

但我想知道第一种方式是否可行?

1 个答案:

答案 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")
});