2

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

我尝试使用:

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

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

先感谢您

4

1 回答 1

2

如果您检查 Backbone 源代码,您会看到如下内容:

_.extend(Model.prototype, Events, {

其中Model和分别是和Events的本地别名。这意味着在您有机会完成审核之前,方法 from 将被复制到模型、集合和视图原型中。Backbone.ModelBackbone.EventsBackbone.EventsBackbone.Events.trigger

您需要trigger在加载 Backbone 之后但在加载其他任何内容(包括 Marionette)之前包装所有四个 s。像这样的东西:

(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">应该可以解决问题。

于 2013-11-13T06:44:06.383 回答