2017-09-03 4 views
1

私がやろうとしていること: 必要な情報の一部が次のルートに入力されるため、レコードを作成し、 。Emberの動的ルートで非永続レコードを使用する正しい方法は何ですか

私はどのようにしていますか? 私はuuidを生成し、それをレコードに割り当てています。そして、新しいルートに移行します。

createOrder() { 
     var d = new Date().getTime(); 
     var uuid = 'xxxxyyyxxxxxxxxyyxyxxxyyy'.replace(/[xy]/g, function(c){ 
     var r = (d + Math.random() * 16) % 16 | 0; 
     d = Math.floor(d/16); 
     return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16); 
     }); 
     console.log(uuid) 
     this.get('model.event.orders').addObject(this.store.createRecord('order', {id:uuid})); 

this.transitionToRoute('orders.list.new', uuid); 

問題: 予想通りURLが/orders/<order:id>/newあるが、モデルを移行する際 代わりここでレコードのローカルストレージまたはメモリを使用する、404に戻り、サーバからデータをフェッチしようとし存在する。

私が欲しいもの: ローカルストレージを使用してエラーにならないようにするにはどうすればよいですか。

+0

あなたはidを 'transitionToRoute'に渡すべきではありません – Lux

+0

ありがとう@Luxそれは働いた! –

答えて

1

Luxがコメントに書いたとおり、モデルを渡すと問題が解決します。理由は簡単です:transitionToRoute関数でモデルが引数として与えられた場合、Emberはバックエンドからモデルをフェッチするのではなくそのモデルを使用します(model hookを呼び出す)。ドキュメントから

必要に応じて、当該ルートのためのモデルを提供します。モデルは、ルートのserializeフックを使用してURLにシリアル化されます。

リテラルが渡された場合(番号や文字列など)、代わりに識別子として扱われます。この場合、ルートのmodel hookこれはまた、AJAXリクエストが発射されていないことを確認するの燃えさしの方法です

0
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model(params) { 
    return this.get('store').peekRecord('order', params.id); 
    } 
}); 

トリガされます。 それは直接店に依頼します。

関連する問題