2016-08-05 6 views
0

私は1つのフィールド、名前を持つ非常に簡単な作成者モデルを持っています。私は提出されたときにアクションの保存を呼び出す私の著者/新しいテンプレートのフォームを持っています。ember - 新しいモデルを保存できません

<form {{action "save" on="submit"}}> 
    {{input value=model.name placeholder="Name"}}<br> 
    <input type="submit" value="Save"> 

</form> 

私の作者/新規作成のルートでは、作成者のレコードを作成するためのモデルを定義し、このモデルを保存するためのアクションを定義します。

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
     return this.store.createRecord('author'); 
    }, 
    actions: { 
     save() { 
      this.get('model').save(); 
     } 
    } 
}); 

ただし、保存ボタンをクリックすると、コンソールに次のエラーが表示されます。 Uncaught TypeError: this.get(...).save is not a function。私が間違っていることについて誰でも助けてくれますか?唯一のネストされたルートのmodelForを使用しようと

<form {{action "save" on="submit" model}}>

save(model) { model.save(); }

+0

this.get(「モデル」)ルートで定義された関数モデルを返します...一つの可能​​な解決策は、それが動作するコントローラへのあなたの保存機能を移動するだろう。 – kumkanillam

+0

ルートからではなくコントローラからモデルを取得します。コントローラを使用するにはvar cont = this.controllerFor( 'authors.new'); cont.get( 'model')。save(); – kumkanillam

+0

[modelFor](http://emberjs.com/api/classes/Ember.Route.html#method_modelFor)を使用してルート内のモデルを取得できます。 –

答えて

0

最も簡単で最もクリーンは、あなたの機能を保存するためにモデルを渡すことであろう。

あなたのルートにのみmodelフックを実装するので、emberは他のすべてのフックをデフォルトの実装で適用します。

controllerにモデルフックから返されたものをmodelと設定します。

それではあなたはここで行うことができますすることです。

let newAuthor = this.get('controller.model'); 
    newAuthor.save().then(() => { return console.log('it saved!') }); 
0

関連する問題