私の問題は、emberjsの問題#1183と#1268に関連しています。
ルートに動的要素があります。アプリケーションをナビゲートすれば、すべて問題ありません。問題は、ページをリロードするとき、またはURLを入力するときです。その場合、アプリは逆シリアル化関数に入り、IDでオブジェクトをロードしますが、このロードは非同期です。
問題#1268で、lukemeliaは「deserializeメソッドの結果にpromisesパターンを実装させる必要があります」と述べています。
私はそれを試しますが、常に文脈を失います。私のコードは次のようになります。
page: Ember.Route.extend
route: '/:alias'
deserialize: (router, params) -> page=App.Page.find(params.alias)
$.when( page.get("isLoaded") ).done( () -> console.debug(page.get("alias")) return page)
loading: Em.State.extend
ルータはロード状態になりますが、コンテキストデータなしで戻ります。私は何か間違ったことをしていると思います。おそらくすべてが間違っています。
誰か助けてもらえますか?例はありますか?
ありがとう!
解決済み:
page: Ember.Route.extend
route: '/:id'
deserialize: (router, params) ->
page=App.Page.find(params.id})
deferred = $.Deferred()
page.addObserver("isLoaded", -> deferred.resolve(page))
return deferred.promise()
serialize: (router, page) ->
return {id: page.get("id") }
connectOutlets: (router, page) ->
router.get('applicationController').connectOutlet
context: page
name: "page"
loading: Em.State.extend
connectOutlets: (router, context) ->
router.get('applicationController').connectOutlet(context: context, name: "loading")
ページのロード中はアクティブ状態がロード中ですが、ページのロードが完了すると、ルーターはページの状態を自動的にロードします。
これが誰かに役立つことを願っています