6

伙计们,我是backboneJs的新手,我尝试编写一个基本程序来在events.on中返回一个值,如下所示,但它不起作用。

$(function(){
    // object.on(event, callback, [context])Alias: bind 
    var object = {};
    _.extend(object, Backbone.Events);

    object.on('add',function(a,b){
        return a + b;
    });

    var sum = object.trigger('add',1,3);
    // not as I expected.
    alert(sum);
});

我希望有人给我一些理想,非常感谢。

4

2 回答 2

4

Backbone.Events 不是为了返回值而创建的,而是作为对象的通知机制。已注册回调的返回值将被忽略,并返回触发事件的实际对象(这就是 sum 不包含 4 的原因)。

如果你真的需要从事件中提取一些东西,你可以像这样重组你的代码:

$(function(){
    // object.on(event, callback, [context])Alias: bind 
    var object = {};
    _.extend(object, Backbone.Events);

    // register variable outside of callback scope
    var sum;
    object.on('add',function(a,b){
        // store result inside variable coming from outside
        sum = a + b;
    });

    // trigger don't return anything, but sum variable will be filled    
    object.trigger('add',1,3);
    // not as I expected.
    alert(sum);
});
于 2013-06-07T08:11:43.290 回答
1

我想出了关于这个问题的另一种解决方案,如下所示:

    $(function(){
    // object.on(event, callback, [context])Alias: bind 
    var object = {};
    _.extend(object, Backbone.Events);

    // add a attribute 'sum' for the object, to hold the value.
    object.on('add',function(a,b){
        return this.sum = a+b;
    });
    var r = object.trigger('add',1,3);
    alert(r.sum);
});
于 2013-06-08T01:19:45.857 回答