私はember-dataなしで新しいものを使用しているので、動的URLセグメント用Router
に独自のserialize
/を実装する必要があります。deserialize
ArrayController
内にデータが入力されているがありますApplication#ready
。
簡単にするために、2つのルートがあるとしましょう:item > '/item/:item_id'
&items > '/items'
。
ルートのdeserializeメソッドは、item
これに沿ったものに見えます
deserialze: function(router, params){
return router.get('myController')
.findProperty('id', params['item_id']);
}
ルート上でアプリを初期化し、すべてを介して特定のアイテムitems
のルートに移動すると、すべて正常に機能します。また、この時点以降、問題なくURLを特定のURLに手動で変更できます。item
{{action}}
id
ただし、item
ルート(つまり/item/2
)でアプリを起動しようとすると、 deserialize
undefinedが返されます。Application#ready
これは、コントローラーへの入力が完了していないためだと思います。
これを回避するにはどうすればよいですか?
編集:これは私の質問に答えると思います。ember-dataを使用します。
非同期
最後のポイント:アプリが呼び出されるまでにPost 1>がまだロードされていない場合、このシステムがどのように機能するかを自問するかもしれません
App.Post.find(1)
。これが機能する理由は
ember-data
、クエリを開始する必要がある場合でも、常にオブジェクトをすぐに返すためです。data
そのオブジェクトは空のハッシュで始まります。サーバーがデータを返すと、ember-dataはオブジェクトのdata
を更新します。これにより、定義されたすべての属性(を使用して定義されたプロパティDS.attr
)のバインディングもトリガーされます。