【发布时间】:2013-02-14 08:57:45
【问题描述】:
我的骨干有以下问题,我想知道哪种策略更合适
我有一个选择控件,实现为 Backbone 视图,它最初加载一个选项,说“加载选项”。所以我加载一个只有一个元素的数组并渲染视图。
选项将从集合中加载,因此我触发了一个 fetch 集合。
然后我初始化一个组件,该组件负责显示每个字段的行错误。所以我保存了combo的dom元素的引用。
当获取操作最终准备就绪时,我使用从集合中加载的所有选项重新渲染控件。
为了渲染视图,我使用了这样的东西:
render: function() {
this.$el.html(this.template(this.model.attributes));
return this;
}
相当标准的骨干材料
问题是第二次渲染视图后dom的引用不再有效,
也许这种情况有点奇怪,但我可以想到很多情况,在这些情况下我必须重新渲染视图而不会丢失它们的 dom 引用(例如,一个依赖于另一个组合的组合)
所以我想知道在不丢失视图内对 dom 元素的所有引用的情况下重新渲染视图的最佳方法是什么...
【问题讨论】:
-
我的 2 美分...你永远不应该直接使用 model.attributes,这就是为什么你有 model.get('something') 和 model.set('something', value) 或模型。设置({一些:a,事物:b})。
-
仅使用 model.attributes 阅读有什么问题?我明白为什么我应该使用 Model#Set (来触发更改事件和其他东西),但 Model#Get 并没有做太多。看看代码,它只是一个:return this.attributes[attr];
-
而且,据我所知,没有model.getAll()。 model.attributes 似乎是这样做的唯一方法。
-
在某些时候你的程序员会使用“model.attributes”而不是“model.set”来编写,因为你缺乏一致性。
-
@opensas 为了让“属性”不可见(因为它主要供内部使用),我们执行以下操作:`render: function() { this.$el.html(this .template(this.model.toJSON()));返回这个; } `
标签: backbone.js view rendering