保存模型后无法重新渲染主干视图
unable to re-render the backbone view after saving the model
我保存了模型,并且从服务器端得到了更新DB的ok响应。我要做的是重新绘制集合,并使用保存的模型信息更新视图。我遗漏了一些小东西,但我就是想不通。
$(document).ready(function () {
window.App = {
Models: {},
Collections: {},
Views: {}
};
window.template = function(id){
return _.template( $('#' + id).html() );
};
// Person Model
App.Models.Person = Backbone.Model.extend({
defaults: {
id: null,
question: null,
quizid: null,
answerid: null
},
url: function() {
return 'myurl/';
}
});
App.Collections.People = Backbone.Collection.extend({
model: App.Models.Person,
url: 'myurl/'
});
App.Views.People = Backbone.View.extend({
tagName: 'ul',
render: function(){
this.collection.each(function(person){
var personView = new App.Views.Person({ model: person });
this.$el.append(personView.render().el);
}, this);
return this;
}
});
App.Views.Person = Backbone.View.extend({
tagName: 'li',
template: template('personTemplate'),
events: {
"click #saveButton" : "savedata",
},
savedata: function(event){
//alert(this.model.get("id") + " " + $('#title').val());
var newModel = new App.Models.Person();
newModel.save({id: this.model.get("id"), question: $('#title').val()}, {
wait : true,
success: function (response) {
alert(response.responseText);
},
error: function (model, response) {
alert(response.responseText);
}
}
);
},
render: function(){
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});
var peopleCollection = new App.Collections.People;
peopleCollection.fetch({
success: function(){
var peopleView = new App.Views.People({collection: peopleCollection});
$('body').append(peopleView.render().el);
}});
var pw = new peopleView({collection: personCollection});
pw.render();
如果要在编辑模型数据后刷新视图,则必须侦听sync
或change
事件并重新呈现视图。
App.Views.Person = Backbone.View.extend({
initialize: function(params) {
this.listenTo(this.model, 'sync', this.render);
}
});
如果你正在添加一个全新的模型,那么你需要在创建后将其添加到集合中。
newModel.save({id: this.model.get("id"), question: $('#title').val()} //...
this.collection.add(newModel)
并在人员视图中侦听add
事件
this.lisenTo(this.collection, 'add', this.render
App.Views.People = Backbone.View.extend({
initialize: function(params) {
this.listenTo(this.collection, 'add remove sync', this.render);
},
render: function(){
this.$el.empty();
this.collection.each(function(person){
var personView = new App.Views.Person({ model: person });
this.$el.append(personView.render().el);
}, this);
return this;
}
});
在这种情况下,重新获取整个集合是多余的。
相关文章:
- backbone.js无法渲染视图
- 如何在渲染视图时将变量传递给Node.js中的脚本标记
- 提线木偶如何将渲染视图附加到DOM
- AngularJS更新控制器变量并再次渲染视图
- 主干提取模型然后渲染视图
- 如何强制对模态进行新渲染
- 当我认为它不应该重新渲染视图时,如何防止 Meteor 在 html 选择 dom 单击事件上重新渲染视图
- UIwebview图片到新的视图控制器
- Play Framework 2.0-渲染视图中的问题
- Ui路由器:复合视图渲染视图一次
- Rails / JavaScript 在渲染视图之前交换 CSS 类
- 不显示主干渲染视图..仅在控制台中
- 尝试使用 javascript 从 Tableau 服务器渲染视图时出错
- 使用 React 在浏览器调整大小时重新渲染视图
- 无法使用Ionic渲染视图
- backbone.js:渲染视图时引发的事件
- 主干:将模型添加到集合并渲染视图
- 骨干显示/隐藏渲染视图最佳实践
- 使用玉石、快递和僧侣的所有数据渲染视图
- 如何在backbone.js中等待渲染视图,直到获取完成