Backbone.js 在主干中的save方法之后向集合添加模型

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 = {

提交数据时,我正在使用保存方法。save方法成功回调后,集合应该用我保存的模型更新,因为我想从服务器获取模型的id。我的代码如下

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();好了: