外部调用Backbone.View.render的任何理由?

时间:2012-06-26 13:58:43

标签: javascript backbone.js backbone-views

以下似乎是在Backbone.js中创建小型子视图的一种非常常见的模式:this.$el.append(new ListItem({...}).render().el)

我只能想到render的外部调用导致的问题,例如视图的数据尚未被提取。这就是为什么我让视图处理它自己的渲染。我在这里错过了什么吗?

编辑:伪代码中的示例(无关代码省略等)以澄清事情:

为什么明确调用render的以下内容:

var FruitView = Backbone.View.extend({
  render: function() {
    this.$el.html(...);
  }
});

var FruitListView = Backbone.View.extend({
  render: function() {
    this.collection.each(function(fruit) {
      this.$el.append(new FruitView({...}).render().el);
    });
  }
});

而不是FruitView处理自己渲染的地方:

var FruitView = Backbone.View.extend({
  initialize: function() {
    this.render();
  },

  render: function() {
    this.$el.html(...);
  }
});

var FruitListView = Backbone.View.extend({
  render: function() {
    this.collection.each(function(fruit) {
      this.$el.append(new FruitView({...}).el);
    });
  }
});

1 个答案:

答案 0 :(得分:0)

父视图可能绑定到集合,并且每个“行”绑定到模型。

只要你有一个重新渲染绑定集合'reset'和'add'(或者一个单独的函数用于在'add'上附加一个新的渲染行),那么实例化和渲染一个视图并不重要。例如,对'row'行重新渲染绑定。

在最常见的情况下,我猜想如果集合是空的,那么你的代码行所在的循环甚至都不会运行。然后集合将“重置”并且视图将首次使用数据进行渲染。

然而,和往常一样,我可能已经错过了这一点;-)今天下午我会看到这个主题,因为你有任何笔记

修改

我明白你的意思了。我真的不明白为什么。我想我通常只是写另一种方式,因为那是我第一次进入它时看到的模式。

正如您所说 - 所有数据/加载/绑定问题都没有出现。

我想在init()上不渲染()的唯一原因是你有时想在不渲染的情况下进行初始化吗?