Emberjs roteamento assíncrono
Meu problema está relacionado com os problemas# 1183 e# 1268 de emberjs.
Eu tenho elementos dinâmicos nas rotas. Tudo está bem se eu navegar pelo aplicativo. O problema é quando eu recarrego uma página ou quando digito o URL. Nesse caso, o aplicativo entra na função desserializar e carrega e objeto por seu id, mas essa carga é assíncrona.
Em causa# 1268 lukemelia diz"você precisará fazer com que o resultado do seu método de desserialização implemente o padrão de promessas".
Eu tento, mas sempre contexto solto. Meu código é semelhante a:
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
O roteador vai para o estado de carregamento, mas retorna sem dados de contexto. Eu acho que estou fazendo algo errado. Possivelmente tudo está errado.
Alguém pode me ajudar? Existe e exemplo?
Obrigado!
Resolvido:
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")
Enquanto a página está carregando, o estado ativo está carregando, quando o carregamento da página termina, o estado da página de carregamento do roteador é automaticamente.
Espero que isso possa ajudar alguém