Ember.js: Usar this.transitionTo pula o carregamento do modelo

Criado em 22 dez. 2013  ·  3Comentários  ·  Fonte: emberjs/ember.js

Não tenho certeza se este é um comportamento intencional, mas deixe-me explicar. Se eu usar um transactionTo em uma rota que possui segmentos dinâmicos, o método do modelo na rota de destino nunca será chamado. Basicamente, estou apenas passando por um parâmetro com uma id e ainda quero carregar o modelo certo.

Se eu atualizar a página com o URL correto, o modelo será carregado perfeitamente. Eu montei um codepen para demonstrar.

http://codepen.io/anon/pen/LsfhB

A versão atual será desconectada do console "Estou aqui." Se você olhar para IndexRoute, há uma transição comentada. Se estiver ativado, o "Estou aqui" nunca será acionado.

Isso é esperado? Em caso afirmativo, onde devo carregar meu modelo para a rota de confirmação?

Comentários muito úteis

Se você alterar a transição para this.transitionTo('confirm', 1); , ela funcionará conforme o esperado.

IIRC se você passar primitivas (string, número) para a transição em vez de um modelo completo, então ele descobrirá que é um ID e o usará para construir os parâmetros para a chamada para model , mas se você passar qualquer coisa complexa por (em neste caso, um objeto), então ele trata isso como se você tivesse passado no modelo e, portanto, não chama o gancho do modelo.

A documentação da API provavelmente funcionaria com um exemplo de passagem de IDs em vez de modelos completos: http://emberjs.com/api/classes/Ember.Route.html#method_transitionTo

Espero que faça sentido

Todos 3 comentários

Se você alterar a transição para this.transitionTo('confirm', 1); , ela funcionará conforme o esperado.

IIRC se você passar primitivas (string, número) para a transição em vez de um modelo completo, então ele descobrirá que é um ID e o usará para construir os parâmetros para a chamada para model , mas se você passar qualquer coisa complexa por (em neste caso, um objeto), então ele trata isso como se você tivesse passado no modelo e, portanto, não chama o gancho do modelo.

A documentação da API provavelmente funcionaria com um exemplo de passagem de IDs em vez de modelos completos: http://emberjs.com/api/classes/Ember.Route.html#method_transitionTo

Espero que faça sentido

Faz sentido agora. Minha pergunta instintiva inicial após seu comentário foi como você passa vários parâmetros? Mas parece que você apenas os passa como argumentos separados.

this.transitionTo('confirm.url', 1, 'the-slug-I-want');

Isso funciona bem para mim.

Pergunta aqui, se você tem uma rota com sub-rotas, todas com segmento dinâmico:
por exemplo
this.route ('organização', {caminho: 'organizações /: id_organização'}, função () {
this.route ('projeto', {caminho: 'projetos /: id_do_projeto'}, função () {
this.route ('tela', {caminho: 'telas /: id da tela'});
});
e estou em outra rota, por exemplo, rota de autenticação. Quando vou para this.transitionTo ('organization.project.screen',
{organization_id: 'grege23-234-4c3e-96fe-234423'},
{project_id: '234234-23423-4b99-a492-234'},
{screen_id: '34534-48f4-471d-ad17-3'45});
Não vejo nada, porque o modelo não está carregado.
Como você poderia ir para este?

Esta página foi útil?
0 / 5 - 0 avaliações