Domanda

Ho una vista laterale con un elenco di oggetti come

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

Ora, sto cercando di visualizzare la vista della barra laterale su due percorsi diversi, ma ho corso un piccolo problema. Sulla rotta A, voglio il metodo Dosomething () per stampare "A", e sulla rotta B Voglio il metodo Dosomething () per stampare "B". Quindi, mi chiedevo qual è il miglior approccio in questo problema? Ci ho pensato e ho trovato i seguenti 2 approcci ma non sembrano né essere abbastanza elegante.

approccio 1

Crea un'altra sidebarview e chiamalo SidebarView2, quindi modificare il metodo Dosomething to DosomethingForroRouteb. Quindi posso usare la sidebarview2 per il Route B. Tuttavia, ciò ha violato il principio secco; Per non parlare, diciamo che voglio cambiare il metodo di rendering per la sidebarview in seguito, dovrei apportare modifiche in due luoghi diversi. Nel complesso, penso che questo sia un approccio molto brutto

approccio 2

All'interno del metodo Dosomething (), posso avere la dichiarazione logica come

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

un po 'più elegante dell'approccio 1 ma avere una dichiarazione logica all'interno della tua vista è un po' troppo hacky.

Comunque, la mia domanda è che dovrei usare l'approccio 2 o c'è un approccio migliore a questo problema?

Grazie

È stato utile?

Soluzione

Perché non lasciare che la copertura sia accettata un parametro di quale cosa vuoi visualizzare.

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

    events: {...},

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

     render: function(){ ...}
}
.

E poi nel tuo router:

 route_method: function(path){
     new SideBarView({display: path});
 }
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top