duc*_*cin 3 console events triggers backbone.js
我有一个下划线/骨干/需要应用程序,我想将通过主干触发的所有事件输出到控制台(换句话说:通过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);
}
Run Code Online (Sandbox Code Playgroud)
也不是这样
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);
Run Code Online (Sandbox Code Playgroud)
工作.我很欣赏javascript(不是coffeescript)解决方案.
nik*_*shr 10
你包装纸失败,因为在骨干混合Backbone.Events行为上Backbone.Model,Backbone.Collection等等.例如,Backbone.Model被定义为
var Model = Backbone.Model = function(attributes, options) {
...
};
_.extend(Model.prototype, Events, {
...
};
Run Code Online (Sandbox Code Playgroud)
这意味着当你重新定义时Backbone.Events.trigger,已经太晚了.
但一切都不会丢失!您将无法trigger一次性重新定义所有方法,但您可以在类级别重新定义它们:
Backbone.Model.prototype.trigger = function() {
console.log('Event', arguments);
Backbone.Events.trigger.apply(this, arguments);
}
Run Code Online (Sandbox Code Playgroud)
和演示http://jsfiddle.net/nikoshr/G2Qfn/
对于给定的类,您可以覆盖触发器方法:
var M = Backbone.Model.extend({
trigger: function() {
console.log('Event', arguments);
Backbone.Model.prototype.trigger.apply(this, arguments);
}
});
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/nikoshr/G2Qfn/1/
或者对于给定的实例
var M = Backbone.Model.extend({});
var m = new M();
m.trigger = function() {
console.log('Event', arguments);
M.prototype.trigger.apply(this, arguments);
}
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/nikoshr/G2Qfn/2/
| 归档时间: |
|
| 查看次数: |
1824 次 |
| 最近记录: |