2012-02-08 83 views
0

我在嘗試將任務模型更新到數據庫時遇到問題。它就像是一個新模型。保存後可能會出現相關錯誤錯誤和代碼如下。是否需要其他信息?backbonejs POST保存PUT的不存在

我看着這個question related to my question,但我已經確保使用id屬性。

錯誤:

Uncaught TypeError: Object function (obj) { return new wrapper(obj); } has no method 'has' 
_.extend.setbackbone.js:246 
_.extend.save.options.successbackbone.js:308 
jQuery.Callbacks.firejquery.js:1046 
jQuery.Callbacks.self.fireWithjquery.js:1164 
donejquery.js:7399 
jQuery.ajaxTransport.send.callback 

代碼:

Update: function(id) { 
      console.log('Updating task'); 
      this.task = this.taskList.get(id); 
      var new_task_name = prompt("enter new name for " + this.task.get("name"),"Default..."); 
      console.log('saving task ' + this.task.id +': '+ this.task.get("name") + ' isNew? -' + this.task.isNew()); 
      this.task.save({ 
       name: new_task_name 
      }); 
      console.log('task saved ' + this.task.id +': '+ this.task.get("name") + ' isNew? -' + this.task.isNew()); 

      this.taskView = new TaskView({ 
       model: this.task 
      }); 
      this.taskView.render(); 
     } 

回答

1

我不知道你是什麼錯誤。如果模型有一個id集,那麼isNew()應該返回false。檢查模型上的'idAttribute',並在模型上設置此值。

確實存在的一個問題是save()方法是異步的。如果你想在任務被保存時渲染TaskView,你應該添加一個成功處理器(如果失敗的話還有一個錯誤處理器),例如

var me = this; 
this.task.save({ 
    name: new_task_name 
}, { 
    success: function(task, response) { 
     console.log('task saved ' + task.id +': '+ task.get("name") + ' isNew? -' + task.isNew()); 

     me.taskView = new TaskView({ 
      model: task 
     }); 
     me.taskView.render(); 
    }, 
    error: function(model, response) { 
     var errorMsg; 
     // Response may be string (if failed model validation) or an AJAX response (if failed server side) 
     if (_.isString(response)) 
      errorMsg = response; 
     else 
      errorMsg = response.responseText; 

     // Display error 
    } 
}); 
+0

這是有用的信息,非常感謝你! – Lucas 2012-02-09 15:11:35

+0

沒問題,請注意,在您的示例中,名稱將在視圖中正確更新,但在更復雜的示例中,服務器更新其他屬性非常有用。無論保存失敗,錯誤處理程序應該在那裏。 – 2012-02-09 23:28:14

+0

是的,我剛剛實現了這一點,並改變了基於回調的視圖渲染。 – Lucas 2012-02-10 16:23:27