Backbonejs Voir la meilleure approche Rendu
-
11-12-2019 - |
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.
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
à 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
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});
}