私は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)でアプリを起動しようとすると、 deserializeundefinedが返されます。Application#readyこれは、コントローラーへの入力が完了していないためだと思います。
これを回避するにはどうすればよいですか?
編集:これは私の質問に答えると思います。ember-dataを使用します。
非同期
最後のポイント:アプリが呼び出されるまでにPost 1>がまだロードされていない場合、このシステムがどのように機能するかを自問するかもしれません
App.Post.find(1)。これが機能する理由は
ember-data、クエリを開始する必要がある場合でも、常にオブジェクトをすぐに返すためです。dataそのオブジェクトは空のハッシュで始まります。サーバーがデータを返すと、ember-dataはオブジェクトのdataを更新します。これにより、定義されたすべての属性(を使用して定義されたプロパティDS.attr)のバインディングもトリガーされます。