Question

J'ai une vue de barre latérale avec une liste d'éléments comme si

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

Maintenant, j'essaie d'afficher la vue de la barre latérale sur deux itinéraires différents, mais j'ai rencontré un petit problème. Sur la route A, je veux que la méthode Dosomething () imprime "A", et sur la route B, je souhaite la méthode Dosomething () d'imprimer "B". Alors, je me demandais quelle est la meilleure approche à ce problème? J'y ai pensé et j'ai proposé les deux approches suivantes, mais elle ne semblait pas trop être assez élégante.

approche 1

Créez une autre latéraleview et appelez-le SideBarview2, puis modifiez la méthode DOSOMODIAT sur DOSOMODOREDFOROUTEB. Alors je peux utiliser la Sidebarview2 pour la route B. Cependant, cela violait le principe sec; Sans parler, disons que je veux modifier la méthode de rendu pour la barre latéraleview ultérieurement, je devrais apporter des modifications à deux endroits différents. Dans l'ensemble, je pense que c'est une très mauvaise approche

approche 2

à l'intérieur de la méthode Dosomething (), je peux avoir la déclaration logique comme si

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

Un peu plus élégant que l'approche 1 mais avoir une déclaration logique à votre vue est un peu trop hacky.

Quoi qu'il en soit, ma question est que je devrais utiliser l'approche 2 ou y a-t-il une meilleure approche de ce problème?

merci

Était-ce utile?

La solution

Pourquoi ne laissez-vous pas la face SideBarView accepter un paramètre de quelle chose que vous souhaitez afficher.

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

    events: {...},

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

     render: function(){ ...}
}

Et puis dans votre routeur:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top