2016-04-11 13 views
0

前もって謝罪しています。私はEmberとjavascriptの新機能です。私はhttps://medium.com/@jamesfuthey/a-gentle-introduction-to-ember-2-0-8ef1f378ee4#.mis7qdebsEmber.jsの更新レコード2.4

でチュートリアルを追ってきた

彼は、コンポーネントを作成し、コンポーネントとルートにすべてのアクションを置く代わりのコントローラを使用してのパターンを紹介しています。データベース(firebase)のレコードを更新する方法を知りたい

モデルでIDを明示的に作成していないため、属性の1つを使用して特定のレコードを検索しようとしましたが、機能しません。私は

Error: no record was found at https://taskline.firebaseio.com/tasks/taskname 

私はfindRecordの構文が間違っていると考えているのだと思う。私は、さらに私は、同じ機能によってスローされるように表示されるエラー

Uncaught TypeError: undefined is not a function index.js:26 
updateTask 

を取得https://guides.emberjs.com/v2.4.0/models/creating-updating-and-deleting-records/

updateTask: function (model) { 
    let task = this.store.findRecord('task', 'taskname').then(function(task){ 
    task.set('taskname', model.taskname); 
    task.set('startdate', model.startdate); 
    task.set('enddate', model.enddate); 
    task.set('banding', model.banding); 
    }); 
    task.save(); 
} 

ドキュメントで説明したように、私は規則を次のようと思いました。誰も私をここにリダイレクトできますか?

答えて

1

findRecord(レコードを見つけるために非同期呼び出しを行う可能性があるため)約束オブジェクトを返しています。 then関数は、タスクが完全に読み込まれる場所です。タスクプロパティを適切な場所(then関数内)に設定しましたが、ロードされたタスクの代わりにpromiseのsaveを呼び出しました。あなたのコードは次のようになります。保存する前に

updateTask: function (model) { 
    this.store.findRecord('task', 'taskname').then(function(task){ 
     task.set('taskname', model.taskname); 
     task.set('startdate', model.startdate); 
     task.set('enddate', model.enddate); 
     task.set('banding', model.banding); 
     return task.save(); 
    }); 
} 

return文を(自分自身を救うも約束です)だけでチェーンに約束オブジェクトです。だから、あなたがfindRecordから約束を返せば、その約束で呼ばれた人は、セーブが終わった後で解決します。

+0

これは非常に明確な指示です。データをfirebaseにプッシュする際にエラーが残っています。そのため、画面が更新され、計算されたプロパティの一部が再計算されますが、データはサーバーまで保持されません。 – manisha

+0

ブラウザ(F12)で開発ツールを開くと、保存時にネットワークタブにエラーが表示されますか? – jcbvm

+0

ネットワークタブには何も書き込まれませんが、これはコンソール 'Error:https:// taskline.firebaseio.com/tasks/taskname'のレコードが見つかりませんでした。 – manisha

関連する問題