我现在正在搞乱Backbone几个星期,并基于教程做了一些简单的应用程序。现在我又一次从头开始尝试使用Backbone提供的不错功能,因为我应该这样做。BackboneJS:查看呈现良好,但刷新与未定义的集合
尽管如此,我的看法仍然存在。当页面加载时,它呈现良好,并通过迭代集合来创建其嵌套视图。 当我再次调用render()来刷新仅仅一个条目的整个列表时,所有视图属性似乎都是未定义的。
单个条目的模式:
Entry = Backbone.Model.extend({
});
条目的列表:(json.html是dataside占位符)
EntryCollection = Backbone.Collection.extend({
model: Entry,
url: 'json.html'
});
var entries = new EntryCollection();
查看单个项,填补下划线模板并且在模型改变时应该重新呈现自己。
EntryView = Backbone.View.extend({
template: _.template($('#entry-template').html()),
initialize: function(){
this.model.on('change', this.render);
},
render: function(){
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});
查看条目的整个列表这使得每个项目一个EntryView集合中,应重新渲染本身,如果添加一个新的项目。该按钮用于测试目的。现在
EntryListView = Backbone.View.extend({
tagName: 'div',
collection: entries,
events: {
'click button': 'addEntry'
},
initialize: function(){
this.collection.on('add',this.render);
},
render: function(){
this.$el.append('<button>New</button>'); //to test what happens when a new item is added
var els = [];
this.collection.each(function(item){
els.push(new EntryView({model:item}).render().el);
});
this.$el.append(els);
$('#entries').html(this.el);
return this;
},
addEntry: function(){
entries.add(new Entry({
title: "New entry",
text: "This entry was inserted after the view was rendered"
}));
}
});
,如果我从服务器获取的收集,视图渲染罚款:
entries.fetch({
success: function(model,response){
new EntryListView().render();
}
});
当我按一下按钮,一个项目上EntryListView添加到集合中,事件处理程序捕获'add'事件并调用render()。但是如果我在渲染函数中设置了一个断点,我可以看到所有的属性看起来都是“未定义的”。没有el
,没有collection
...
我在哪里出错了? 感谢您的帮助,
罗伯特
非常感谢你的伟大的解释! – user2545975