someModel.bind("all", function(eventName, model, XXXXX, YYYYY) {
options.myStuff = "MyStuff et all";
self.trigger(eventName, model, ??????, ?????);
}
XXXXX,YYYYY,?????标记问题:选项在哪里?
我想在新的上下文中扩充选项并重新触发任何事件。问题是,骨干在某些事件中将选项置于第4位(“更改:xxx”,“错误”等等),在其他一些事件中将选项置于第3位(“更改”,“重置”),这使我无法知道选项在参数中的位置,并知道触发器中应该放置增强选项的位置。除了每个单独事件的明显单独片段之外,还有其他任何方式吗?
更新:看一下骨干源,对我来说一个可接受的解决方案是修补Backbone以在每个事件中始终包含第三个参数,这样选项总是处于相同的第4个位置。这是一个简单的改变,但我希望有更多的用户空间解决方案。
答案 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"});