Melhor abordagem de renderização de visualização do Backbonejs
-
11-12-2019 - |
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
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});
}