Backbone View渲染函数被多次调用

时间:2013-04-15 21:51:37

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

我有一个代表文件夹的视图。我有一堆子视图,这个文件夹视图创建,每个子视图代表该文件夹中的唯一缩略图。事实证明,这些子视图的渲染方法中的每一个都被多次调用(3)。有没有办法找出如何调用视图的渲染方法。例如,如果模型元数据被改变,则存在可以呈现触发事件的不同位置。它已成为一个巨大的混乱,我正在寻找一种方法来调试主干视图,以了解什么是完全触发渲染方法。

3 个答案:

答案 0 :(得分:1)

我总是调试事件的方式是:

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

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

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

我手动添加了requestsync方法来模拟骨干网实际执行的方式。 rendered事件是自定义的 - 没有任何内容可以监听它。只是为了告诉你它是如何/何时发生的。

答案 1 :(得分:1)

正如您所要求的,这是一个如何覆盖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, '.').
}

通过单独覆盖每个方法以在日志中添加对象类型,可以更具体。但是你有了一般的想法。

答案 2 :(得分:0)

您可以试试backbone.debug。应该让您了解正在发生的事件。