我有一个主干木偶视图,其中我定义了许多事件。 我想存储我的itemview中发生的任何事件的日志。我不想写函数调用我的每个数据的审计数据,而是我想覆盖主干木偶事件方法,以便它应用于我的所有ItemViews。
我尝试使用:
var originalTrigger = Backbone.Events.trigger;
Backbone.Events.trigger = function(){
console.log("Event Triggered:");
console.log(arguments.join(", "));
originalTrigger.apply(this, arguments);
}
但它对我没有任何作用。请帮忙
提前谢谢
答案 0 :(得分:2)
如果您查看Backbone来源,您会看到以下内容:
_.extend(Model.prototype, Events, {
其中Model
和Events
分别是Backbone.Model
和Backbone.Events
的本地别名。这意味着Backbone.Events
中的方法将被复制到模型,集合和视图原型中,然后才有可能将Backbone.Events.trigger
包裹在审核中。
你需要在加载Backbone之后但在加载其他任何东西(包括Marionette)之前包装所有四个trigger
。像这样:
(function() {
var trigger = Backbone.Events.trigger;
var wrapper = function() {
console.log("Event Triggered:");
console.log(arguments.join(", "));
trigger.apply(this, arguments);
};
Backbone.Model.prototype.trigger = wrapper;
Backbone.Collection.prototype.trigger = wrapper;
Backbone.View.prototype.trigger = wrapper;
})();
在<script src="backbone.js">
之后但在<script src="backbone.marionette.js">
之前应该做到这一点。