2012-02-08 18 views
0

タスクモデルをデータベースに更新しようとすると問題が発生します。それはまるでその新しいモデルのように働く。私はまた関連するかもしれないセーブの後にエラーを得る?エラーとコードは次のとおりです。追加情報は必要ですか?backbonejs保存時の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(); 
     } 

答えて

0

問題が見つかりました...私は使用しているCodeigniter restful APIでスワップされています。彼らは更新としてPOSTを処理し、新しいものとしてPUTを処理します。

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

+0

問題はありませんが、例では名前がビューで正しく更新されますが、サーバーが他のプロパティを更新するより複雑な例ではこれは便利です。エラーハンドラは、保存が失敗した場合でも、そこに存在する必要があります。 –

+0

yea先日私はこれを実装し、コールバックに基づいてビューレンダリングを変更しました。 – Lucas

関連する問題