有没有办法在Backbone Marionette ItemView中发生console.log所有事件

时间:2013-11-13 06:14:23

标签: javascript backbone.js marionette

我有一个主干木偶视图,其中我定义了许多事件。 我想存储我的itemview中发生的任何事件的日志。我不想写函数调用我的每个数据的审计数据,而是我想覆盖主干木偶事件方法,以便它应用于我的所有ItemViews。

我尝试使用:

var originalTrigger = Backbone.Events.trigger;
Backbone.Events.trigger = function(){
  console.log("Event Triggered:");
  console.log(arguments.join(", "));
  originalTrigger.apply(this, arguments);
}

但它对我没有任何作用。请帮忙

提前谢谢

1 个答案:

答案 0 :(得分:2)

如果您查看Backbone来源,您会看到以下内容:

_.extend(Model.prototype, Events, {

其中ModelEvents分别是Backbone.ModelBackbone.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">之前应该做到这一点。