gpt4 book ai didi

events - 主干控制台日志事件触发

转载 作者:行者123 更新时间:2023-12-01 23:04:17 24 4
gpt4 key购买 nike

我有一个 underscore/backbone/require 应用程序,我想将通过主干触发的所有事件输出到控制台(换句话说:通过 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 在 Backbone.ModelBackbone.Collection 等上混合了 Backbone.Events 行为。例如,Backbone.Model 定义为

var Model = Backbone.Model = function(attributes, options) {
...
};
_.extend(Model.prototype, Events, {
...
};

这意味着当你重新定义Backbone.Events.trigger时,已经为时已晚。

但一切都没有丢失!您将无法一次性重新定义所有 trigger 方法,但您可以在类级别重新定义它们:

Backbone.Model.prototype.trigger = function() {
console.log('Event', arguments);
Backbone.Events.trigger.apply(this, arguments);
}

还有一个演示 http://jsfiddle.net/nikoshr/G2Qfn/

对于给定的类,你可以重写触发方法:

var M = Backbone.Model.extend({
trigger: function() {
console.log('Event', arguments);
Backbone.Model.prototype.trigger.apply(this, arguments);
}
});

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);
}

http://jsfiddle.net/nikoshr/G2Qfn/2/

关于events - 主干控制台日志事件触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16942922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com