Events 主干控制台日志事件触发
我有一个下划线/主干/require应用程序,我想将通过主干触发的所有事件输出到控制台(换句话说:通过Events 主干控制台日志事件触发,events,backbone.js,triggers,console,Events,Backbone.js,Triggers,Console,我有一个下划线/主干/require应用程序,我想将通过主干触发的所有事件输出到控制台(换句话说:通过console.log函数传递每个事件)。我尝试过用下划线包装它,并手动替换该函数。这两者都不是: console.log(Backbone.Events.trigger); var trigger = Backbone.Events.trigger; Backbone.Events.trigger = function(name) { console.log('Event', name
console.log
函数传递每个事件)。我尝试过用下划线包装它,并手动替换该函数。这两者都不是:
console.log(Backbone.Events.trigger);
var trigger = Backbone.Events.trigger;
Backbone.Events.trigger = function(name) {
console.log('Event', name, 'triggered.');
trigger.apply(this, arguments);
}
这也不是:
Backbone.Events.trigger = _.wrap(Backbone.Events.trigger, function(func) {
console.log('EVENT:', Array.prototype.slice.call(arguments));
func(Array.prototype.slice.call(arguments));
});
console.log(Backbone.Events.trigger);
成功了。我希望有一个javascript(而不是coffeescript)解决方案。您的包装失败,因为主干混入了
Backbone.Model
,Backbone.Collection
,等等上的Backbone.Model
行为。例如,Backbone.Model
定义为
var Model = Backbone.Model = function(attributes, options) {
...
};
_.extend(Model.prototype, Events, {
...
};
这意味着当您重新定义主干.Events.trigger时,已经太晚了
但一切都没有失去!您无法一次性重新定义所有trigger
方法,但可以在类级别重新定义它们:
Backbone.Model.prototype.trigger = function() {
console.log('Event', arguments);
Backbone.Events.trigger.apply(this, arguments);
}
还有一个演示
对于给定的类,可以重写触发器方法:
var M = Backbone.Model.extend({
trigger: function() {
console.log('Event', arguments);
Backbone.Model.prototype.trigger.apply(this, arguments);
}
});
或者对于给定的实例
var M = Backbone.Model.extend({});
var m = new M();
m.trigger = function() {
console.log('Event', arguments);
M.prototype.trigger.apply(this, arguments);
}
这正是我需要的,谢谢!我可以看到,如果我从API获取模型,所有模型的所有字段都会发送事件。有没有办法将这样的东西附加到选定的主干模型中?@tkoomzaaskz我添加了一些示例来限制类或实例的行为。