Pergunta

Eu tenho uma visualização da barra lateral com uma lista de itens como este

SideBarView = Backbone.View.extend(
  events:
    "click item": "dosomething"
  render:
    //Render item list from a collection
)

Agora, estou tentando exibir a visualização da barra lateral em duas rotas diferentes, mas tive um pequeno problema.Na rota A, quero que o método dosomething() imprima "A", e na rota B quero que o método dosomething() imprima "B".Então, eu queria saber qual é a melhor abordagem para esse problema?Pensei nisso e criei as duas abordagens a seguir, mas nenhuma delas parece ser elegante o suficiente.

Abordagem 1

Faça outro SideBarView e chame-o de SideBarView2 e depois altere o método dosomething para dosomethingForRouteB.Então posso usar SideBarView2 para a rota B.No entanto, isto violou o princípio DRY;sem mencionar que, digamos que eu queira alterar o método de renderização do SideBarView mais tarde, então teria que fazer alterações em dois locais diferentes.No geral, acho que esta é uma abordagem muito ruim

Abordagem 2

Dentro do método dosomething(), posso ter a instrução lógica assim

route = getCurrentRoute()
if(route = "/routeA")
 print A
else
 print B

Um pouco mais elegante que a abordagem 1, mas ter uma declaração lógica dentro de sua visão é um pouco hackeado.

De qualquer forma, minha pergunta é: devo usar a abordagem 2 ou existe uma abordagem melhor para esse problema?

Obrigado

Foi útil?

Solução

Por que você não deixa o SideBarView aceitar um parâmetro do que você deseja exibir?

SideBarView = Backbone.View.extend({
    print_value: B,

    events: {...},

    initialize: function(options){
        options = options || {};
        if(options.display === 'A'){
             this.print_value = "A";
        }
     },

     render: function(){ ...}
}

E então no seu roteador:

 route_method: function(path){
     new SideBarView({display: path});
 }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top