Backbonejs Ver renderizar el mejor enfoque
-
11-12-2019 - |
Pregunta
Tengo una vista de la barra lateral con una lista de artículos como SO
SideBarView = Backbone.View.extend(
events:
"click item": "dosomething"
render:
//Render item list from a collection
)
Ahora, estoy tratando de mostrar la vista de la barra lateral en dos rutas diferentes, pero corrí a un pequeño problema. En la ruta A, quiero que el método DoSomething () imprima "A", y en la ruta B quiero el método DoSomething () para imprimir "B". Entonces, me preguntaba cuál es el mejor enfoque en este problema? Pensé en ello y se me ocurrió los siguientes 2 enfoques, pero ni parece que es lo suficientemente elegante.
enfoque 1
Haz otra barra lateral y llámelo, LadoBarview2, luego cambie el método DoSomething a dosomethingforrouteb. Entonces, puedo usar SidebarView2 para la ruta B. Sin embargo, esto violó el principio seco; Sin mencionar, digamos que quiero cambiar el método de renderizado para la barra lateral más adelante, entonces tendría que hacer cambios en dos lugares diferentes. En general, creo que este es un enfoque muy malo
se aproxima 2
Dentro del método Dosaltometh (), puedo tener la declaración lógica como SO
route = getCurrentRoute()
if(route = "/routeA")
print A
else
print B
Un poco más elegante que el enfoque 1, pero tener una declaración lógica dentro de su vista es un poco demasiado hacky.
De todos modos, mi pregunta es que debo usar el enfoque 2 o ¿hay un mejor enfoque para este problema?
gracias
Solución
¿Por qué no le permiten que la barra lateral acepte un parámetro de qué cosa que desea mostrar?
SideBarView = Backbone.View.extend({
print_value: B,
events: {...},
initialize: function(options){
options = options || {};
if(options.display === 'A'){
this.print_value = "A";
}
},
render: function(){ ...}
}
y luego en su enrutador:
route_method: function(path){
new SideBarView({display: path});
}