Pergunta

Eu tenho uma interface do usuário de quatro painéis verticais:

  • O primeiro painel mostra o menu e permite que você escolha os dados que deseja exibir
  • O segundo painel permite selecionar um filtro de uma lista de filtros predefinidos
  • O terceiro painel permite ver os resultados da lista do filtro
  • O painel Forth permite exibir os detalhes de um item específico

Para esta interface do usuário, eu uso rotas e pontos de venda aninhados:

App.Router.map(function() {
    this.resource('customers', { 'path' : '/customers' }, function() {
        this.resource('customers_filters', { 'path' : '/:filter' }, function() {
            this.resource('customer', { 'path' : '/show/:customer_id' });
        });
    });
});

Tudo funciona bem, mas quando mostro os detalhes de um item específico (a última rota em minhas rotas aninhadas), o hash no URL não está correto.

  • Primeira rota OK: #/clientes
  • Segunda rota OK: #/clientes/todos
  • Terceira rota KO: #/clientes/função filtro () {[Código nativo]}/show/2

Eu coloquei um exemplo no JSBIN: http://jsbin.com/inagavo/1

O que estou fazendo errado ? obrigada

Foi útil?

Solução

O problema é que a Ember cria o URL com base nos modelos de cada rota. Quando tenta construir a rota abaixo da rota ativa/toda, usa sua variedade de itens (que não possui um campo chamado filtro), para que não saiba como determinar se ele tem atualmente o All/Filter modelo. Uma boa prática é fazer com que sua lesma (o valor no caminho) corresponda à propriedade no modelo.

Se não corresponder, você pode substituir o método serializador na rota, para que a Ember saiba como serializar seu modelo para o URL.

App.CustomersFiltersRoute = Ember.Route.extend({
  model: function(params) {

    if(params.filter == "active") {
      return _.where(App.Customers, {isActive: true});
    }

    return App.Customers;
  },

  serialize: function(model){
    if(model === App.Customers){
      return {filter:'all'}; 
    }
    return {filter:'active'};
  }
});

http://jsbin.com/inagavo/6/edit

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top