【问题标题】:Is there a way to console.log all event occuring inside Backbone Marionette ItemView有没有办法 console.log 在 Backbone Marionette ItemView 中发生的所有事件
【发布时间】:2013-11-13 14:44:06
【问题描述】:

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

我尝试使用:

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

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

提前谢谢你

【问题讨论】:

    标签: javascript backbone.js marionette


    【解决方案1】:

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

    _.extend(Model.prototype, Events, {
    

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

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

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

    【讨论】:

    • 我正在使用 Require.js 加载我的依赖项。 Backbone 和 Marionette 都通过 Require.config 文件加载。我尝试在加载依赖项后添加您的函数,但给了我一个错误 object#object has no method join.
    • 我不知道你会怎么用 require.js 做这个,不过技术应该是一样的,你只需要在 Marionette 之前得到Backbone。没有上下文,这个错误毫无意义。
    • 该方法在包含木偶之前确实有效。但是我仍然找不到使用 require.js 的方法,最后我为每个事件编写自定义代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2015-11-12
    • 2017-11-08
    相关资源
    最近更新 更多