Backbone.js 在主干中的save方法之后向集合添加模型
提交数据时,我正在使用保存方法。save方法成功回调后,集合应该用我保存的模型更新,因为我想从服务器获取模型的id。我的代码如下Backbone.js 在主干中的save方法之后向集合添加模型,backbone.js,Backbone.js,提交数据时,我正在使用保存方法。save方法成功回调后,集合应该用我保存的模型更新,因为我想从服务器获取模型的id。我的代码如下 var app = app || {}; app.AllDoneView = Backbone.View.extend({ el: '#frmAddDone', events:{ 'click #addDone':'addDone' }, addDone: function(e ) { e.preventDefault(); var formData = {
var app = app || {};
app.AllDoneView = Backbone.View.extend({
el: '#frmAddDone',
events:{
'click #addDone':'addDone'
},
addDone: function(e ) {
e.preventDefault();
var formData = {
doneHeading: this.$("#doneHeading").val(),
doneDescription: this.$("#doneDescription").val(),
};
var donemodel = new app.Done();
donemodel.save(formData,
{
success :function(data){
/*my problem is here how do i listen to collection event add that has been
instantiated in intialize property to call renderDone . My tried code is
var donecollection = new app.AllDone();
donecollection.add(donemodel);
and my response from server is
[{id:145, doneHeading:heading , doneDescription:description,
submission_date:2014-08-27 03:20:12}]
*/
},
error: function(data){
console.log('error');
},
});
},
initialize: function() {
this.collection = new app.AllDone();
this.collection.fetch({
error: function () {
console.log("error!!");
},
success: function (collection) {
console.log("no error");
}
});
this.listenTo( this.collection, 'add', this.renderDone );
},
renderDone: function( item ) {
var doneView = new app.DoneView({
model: item
});
this.$el.append( doneView.render().el );
}
});
收藏是
var app = app || {};
app.AllDone = Backbone.Collection.extend({
url: './api',
model: app.Done,
});
模型是
var app = app || {};
app.Done = Backbone.Model.extend({
url: "./insert_done",
});
观点是
var app = app || {};
app.DoneView = Backbone.View.extend({
template: _.template( $( '#doneTemplate' ).html() ),
render: function() {
function
this.$el.html( this.template( this.model.attributes ) );
return this;
}
});
在成功回调中,您创建了一个全新的集合,其中没有注册任何侦听器。这就是为什么未触发
renderDone
的原因
您从服务器收到的模型应添加到直接附加到视图的集合中,this.collection
:
var self = this,
donemodel = new app.Done();
donemodel.save(formData, {
success :function(data){
// this is the collection you created in initialize
self.collection.add(donemodel);
},
error: function(data){
console.log('error');
}
});
this
在您的success
回调中指的是回调方法本身,它显然没有任何this.collection
变量。如何在success callback中将模型添加到我的集合中,同样的集合应该能够调用renderDone方法,因为我需要更新视图。您太棒了,你帮助我增加了知识。我是个新手。谢谢你的回答。如果你能帮助我理解这行的意义,我将非常感谢你,var self=this,donemodel=new app.Done();好了: