我已经使用主干网已经有一段时间了,每次我获得具有自己的事件和行为的视图的动态列表时,我都想知道应该如何存储它们。我有两种方法,我对它们的想法是..
- 将视图内部存储在另一个视图中。这需要适当过滤的开销,但有点独立于 DOM + 可能有更好的内存使用
- 只需生成视图,将它们放入 DOM 并使用 jquery 触发视图事件,例如
$('#someviewid').trigger('somecustomfunction');
- 更易于编写和访问,但依赖项更难查看,如果我只是删除 DOM 节点,我不确定视图/模型是否会被删除
你会推荐什么?
所以这里是扩展的第二个示例,其中新视图只是附加到内部 html 而故事视图本身被遗忘了。但是如果我想访问这个列表中的特定视图,我将不得不使用 DOM 属性,如 id 或 data,然后使用 jquery 访问器触发视图函数
Devclub.Views.StoriesList = Backbone.View.extend({
initialize: function () {
this.collection.bind('reset', this.reset, this);
this.collection.fetch();
},
reset: function (modelList) {
$(this.el).html('');
var me = this;
$.each(modelList.models, function (i, model) {
me.add(model);
});
},
add: function (model) {
var contact_model = new Devclub.Models.Story(model);
var view = new Devclub.Views.Story({
model: contact_model
});
var storyView = view.render().el;
$(this.el).append(storyView);
}
});
相反,如果我想直接调用某些视图方法,我可以将相同的视图列表存储在一个数组中并对其进行迭代