【问题标题】:Backbone View render function getting called multiple times多次调用主干视图渲染函数
【发布时间】:2013-04-15 21:51:36
【问题描述】:

我有一个代表文件夹的视图。我有一堆子视图,这个文件夹视图创建,每个代表该文件夹中的唯一缩略图。事实证明,每个子视图的渲染方法都被多次调用(3)。有没有办法找出视图的渲染方法是如何被调用的。有不同的地方可以呈现触发事件,例如,如果模型元数据发生更改。它已经变得一团糟,我正在寻找一种调试主干视图的方法,以了解究竟是什么触发了渲染方法。

【问题讨论】:

  • 您可以重写trigger 方法来跟踪触发了哪些事件。
  • 你能给我举个例子吗?

标签: javascript backbone.js backbone-views backbone-events


【解决方案1】:

我一直调试事件的方式是:

view.on('all', function(eventName){
    console.log('Name of View: ' + eventName);
});

您可以在视图、模型或集合上执行此操作。

示例http://jsfiddle.net/CoryDanielson/phw4t/6/

我手动添加了requestsync 方法来模拟骨干网的实际执行情况。 rendered 事件是自定义的——没有人听它。只是为了向您展示它是如何/何时发生的。

【讨论】:

    【解决方案2】:

    按照您的要求,这里有一个如何覆盖trigger 方法的示例。请注意,您必须为所有类型的类(模型、视图、集合、路由器)覆盖它。

    var trigger = Backbone.Model.prototype.trigger;
    Backbone.Model.prototype.trigger = Backbone.View.prototype.trigger = Backbone.Collection.prototype.trigger = Backbone.Router.prototype.trigger = function(name) {
      trigger.apply(this, arguments);
      console.log(this, 'triggered the event', name, '.').
    }
    

    您可以通过单独覆盖每个方法以在日志中添加对象类型来更具体。但你明白了。

    【讨论】:

      【解决方案3】:

      您可以尝试一下backbone.debug。应该让您深入了解正在触发的事件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多