我已经使用骨干很长一段时间了,每次我获得有自己的事件和行为的动态视图列表时,我想知道它们应该如何存储。我有两种方式,我对它们的想法是......
$('#someviewid').trigger('somecustomfunction');
- 更容易编写和访问,但依赖关系更难以查看,我不确定视图/模型是否会被删除我只是删除DOM节点你会推荐什么?
所以这里是扩展的第二个例子,其中新视图仅附加到内部html并且storyViews本身被遗忘。但是如果我想从这个列表中访问特定的视图,我将不得不使用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);
}
});
相比之下,如果我想直接调用某些视图方法,我可以在数组中存储相同的视图列表并迭代它
答案 0 :(得分:0)
我认为你应该保留对儿童观点的参考。以下是Addy Osmani的book示例。
Backbone.View.prototype.close = function() {
if (this.onClose) {
this.onClose();
}
this.remove(); };
NewView = Backbone.View.extend({
initialize: function() {
this.childViews = [];
},
renderChildren: function(item) {
var itemView = new NewChildView({ model: item });
$(this.el).prepend(itemView.render());
this.childViews.push(itemView);
},
onClose: function() {
_(this.childViews).each(function(view) {
view.close();
});
} });
NewChildView = Backbone.View.extend({
tagName: 'li',
render: function() {
} });