【发布时间】:2012-01-25 09:26:07
【问题描述】:
我是 Backbone 的新手,有以下问题:
我有一系列模型。
我有一个显示选项卡的集合视图(包含集合中每个模型的视图)。
我有一个模型的视图(对于内容)。
我有一个带路由的路由器。
我想要实现的是像http://jqueryui.com/demos/tabs/这样的功能
我单击一个选项卡(集合模型),然后想将模型传递给内容视图,可能会更改它并反映集合中的更改。
我想出了四个解决方案:
在路由器中:
'switchCommunity': function(id) {
// (a) set new model attributes
this.view.community.model.set(communities.get(id));
// (b) replace model
this.view.community.model = communities.get(id);
// (c) a custom function of the view changes its model
this.view.community.changeModel(communities.get(id));
// (d) a new view
this.view.community = new View({
model: communities.get(id)
})
}
这里的问题是
(a) 不反映模型中的更改 收藏
(b) 不会触发(更改)事件,因为 视图的初始化函数永远不会触发,因为它是 一个全新的模型
(c) 对我来说似乎是个 hack
(d) 每次我单击选项卡时都会创建一个新视图(这是 性能问题?)
这里最好的做法是什么?
【问题讨论】:
-
我会尝试 (d) - 如果您先删除旧视图,这不会成为性能问题。
-
in (d) 我覆盖了我的 this.view.community 是否足够,还是必须手动删除?
-
这应该足够了,只要旧的 dom 元素没有闲置并且绑定了事件监听器,它们就应该被垃圾回收。我会用 firebug 进行验证,但我认为这是正确的。
-
我总是在我的视图中添加一个 close 方法,在取消绑定所有 bacbone 和 dom 事件后将其从 dom 中删除。
-
感谢您提出这个非常有用的问题!选项 (d) 也不是一个好的选择,因为如果您的(子)视图上有事件监听器,它们会在创建新的(子)视图时堆积起来
标签: javascript model-view-controller view model backbone.js