1

以下似乎是在 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);
    });
  }
});

而不是这个 whereFruitView负责自己的渲染:

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);
    });
  }
});
4

1 回答 1

0

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

所以实例化和渲染视图并不重要,只要你有一个重新渲染集合'reset'和'add'的绑定(或一个单独的函数,用于在'add'上附加一个新的渲染行)和一个重新例如,在“更改”行上呈现绑定。

在最常见的情况下,我猜如果集合是空的,那么您的代码行所在的循环甚至都不会运行。然后集合将“重置”,视图将第一次呈现数据。

然而,和往常一样,我可能错过了重点;-) 今天下午我会看这个帖子,看看你有什么笔记

编辑

我明白你的意思了。我真的不明白为什么。我想我通常只是用另一种方式写,因为这是我第一次接触它时看到的很多模式。

正如您所说 - 所有数据/加载/绑定问题都不会涉及。

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

于 2012-06-26T14:10:37.670 回答