我正在编写一个BackboneJS应用程序,其中六个选项卡中的每一个都由他们自己的视图表示。我是否应该保存视图的实例,只要用户点击他已经去过的标签,就调用它render()
函数?或者创建一个新实例并访问jQuery在第一次渲染过程中为我缓存的模板?
如果我执行后者,我仍然需要确保不通过我的JSON API获取另一个集合,因为这是在初始化某些视图期间完成的。
现在我将所有视图实例存储在我的控制器中,但我想知道这是否是内置的,或者有更好的选择。
干杯。
更新:这是我在我的控制器中使用的loadCachedView
函数:
loadCachedView: function (name, view, collection){
if (!this.views[name]){
if (collection){
this.collections[name] = new collection();
}
this.views[name] = new view({collection: this.collections[name]});
} else {
this.views[name].render();
}
},
因此,在渲染视图时,我只需:this.loadCachedView('settings', SettingsView, SettingsCollcetion)
。
答案 0 :(得分:3)
我通常会在控制器中跟踪所有观看内容。然后,控制器根据导航事件在可用视图之间切换:
var Switches;
Switches = [];
Skepic.SwitchView = Backbone.View.extend({
hide: function() {
return this.el.detach();
},
show: function() {
if (!_.include(Switches, this)) {
Switches.push(this);
}
_.each(Switches, function(s) {
return s.hide();
});
this.container().append(this.el);
return $('html, body').animate({
scrollTop: 0
}, 'fast', "linear");
},
container: function() {
if (this.options.container) {
return this.options.container;
} else {
return $("body > .content");
}
}
});
这是在一个视图和另一个视图之间切换的基本视图。控制器将创建视图(根据需要获取数据),当您切换时,您可以在视图中的覆盖show()函数中进行最后一次检查。
(注意我在jQuery上使用detach仍然让事件委托工作)
答案 1 :(得分:1)
你不能在这里使用.memoize函数吗?