以下似乎是在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);
});
}
});
答案 0 :(得分:0)
父视图可能绑定到集合,并且每个“行”绑定到模型。
只要你有一个重新渲染绑定集合'reset'和'add'(或者一个单独的函数用于在'add'上附加一个新的渲染行),那么实例化和渲染一个视图并不重要。例如,对'row'行重新渲染绑定。
在最常见的情况下,我猜想如果集合是空的,那么你的代码行所在的循环甚至都不会运行。然后集合将“重置”并且视图将首次使用数据进行渲染。
然而,和往常一样,我可能已经错过了这一点;-)今天下午我会看到这个主题,因为你有任何笔记
修改强>
我明白你的意思了。我真的不明白为什么。我想我通常只是写另一种方式,因为那是我第一次进入它时看到的模式。
正如您所说 - 所有数据/加载/绑定问题都没有出现。
我想在init()上不渲染()的唯一原因是你有时想在不渲染的情况下进行初始化吗?