Javascript 主干视图在辅助提取时未更新
我使用主干网显示一个项目列表,由服务器上的JSON填充Javascript 主干视图在辅助提取时未更新,javascript,backbone.js,Javascript,Backbone.js,我使用主干网显示一个项目列表,由服务器上的JSON填充 //Models var Note = Backbone.Model.extend(); var NoteList = Backbone.Collection.extend({ model: Note, url: "http://www.myserver.com/notes/notes.json" }); var Notes = new NoteList;
//Models
var Note = Backbone.Model.extend();
var NoteList = Backbone.Collection.extend({
model: Note,
url: "http://www.myserver.com/notes/notes.json"
});
var Notes = new NoteList;
//Views
var NoteView = Backbone.View.extend({
tagName: "li",
template: _.template($('#noteTemplate').html()),
initialize: function() {
this.listenTo(this.model, 'change', this.render);
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});
var AppView = Backbone.View.extend({
el: $("#specificationNotes"),
noteTemplate: _.template($('#noteTemplate').html()),
initialize: function() {
this.listenTo(Notes, 'reset', this.addAll);
this.listenTo(Notes, 'all', this.render);
Notes.fetch({reset:true});
},
addOne: function(note) {
var view = new NoteView({model: note});
this.$("#notesList").append(view.render().el);
},
addAll: function() {
Notes.each(this.addOne, this);
}
});
var App = new AppView;
初始获取将获取正确的内容并显示列表。我使用jQuery对话框“添加注释”,在ajax发布成功后,我调用它将其简单地发布到restfulapi
Notes.fetch();
并且模型会更新,但视图不会更改。您的AppView没有渲染方法,因此第一次提取会导致绘制,因为处理程序绑定到“重置”事件,而第二次提取不会。这里有一个蛮力的例子:
render: function() {
this.$el.html(""); // so we don't readd the same items on re-render
this.addAll();
}
效率低下,因为它每次都会从头开始重新绘制所有笔记,但它至少可以让您在屏幕上看到实时更改。也许会取代
this.listenTo(Notes, 'reset', this.addAll);
this.listenTo(Notes, 'all', this.render);
与
this.listenTo(Notes, 'reset', this.render);
this.listenTo(Notes, 'sync', this.render);