骨干事件触发器中的参数顺序不一致。我该如何解决这个问题?

时间:2012-01-27 12:33:16

标签: events backbone.js

someModel.bind("all", function(eventName, model, XXXXX, YYYYY) {
   options.myStuff = "MyStuff et all";
   self.trigger(eventName, model, ??????, ?????);
}

XXXXX,YYYYY,?????标记问题:选项在哪里?

我想在新的上下文中扩充选项并重新触发任何事件。问题是,骨干在某些事件中将选项置于第4位(“更改:xxx”,“错误”等等),在其他一些事件中将选项置于第3位(“更改”,“重置”),这使我无法知道选项在参数中的位置,并知道触发器中应该放置增强选项的位置。除了每个单独事件的明显单独片段之外,还有其他任何方式吗?

更新:看一下骨干源,对我来说一个可接受的解决方案是修补Backbone以在每个事件中始终包含第三个参数,这样选项总是处于相同的第4个位置。这是一个简单的改变,但我希望有更多的用户空间解决方案。

1 个答案:

答案 0 :(得分:4)

据我所知,选项始终是传递给回调的最后一个参数。您可以使用回调的arguments对象来修改选项。 https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/arguments

例如

var x=new Backbone.Model();
x.bind("all", function(e) {
    console.log("x : "+e);
    console.log(arguments[arguments.length-1]);
});

var m=new Backbone.Model( {name:"a"} );
m.bind("all",function(e){
    console.log("m : "+e);
    var args=Array.prototype.slice.call(arguments);

    args[args.length-1].modified=true;
    x.trigger.apply(x,args);
});

m.set({name:"b"});