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

¿Fue útil?

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});
 }

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top