Backbonejs Просмотр рендеринга наилучшего подхода
-
11-12-2019 - |
Вопрос
У меня есть вид на боковую панель со списком элементов, как так
SideBarView = Backbone.View.extend(
events:
"click item": "dosomething"
render:
//Render item list from a collection
)
.
Теперь я пытаюсь отобразить вид на боковую панель на двух разных маршрутах, но я столкнулся с небольшой проблемой. На маршруте A, я хочу, чтобы метод дошутного () для печати «A», а на маршруте B я хочу, чтобы метод дошутного () для печати «B». Итак, мне было интересно, какой лучший подход к этой проблеме? Я подумал об этом и придумал следующие 2 подхода, но ни один из них не достаточно элегантных.
<Сильный> Подход 1
Сделайте еще одну сторону и вызовите его Sidebarview2, затем измените метод дошутного для DoSomethingForrouteb. Итак, я могу использовать Sidebarview2 для маршрута B. Однако это нарушило сухое принцип; Не говоря уже о том, что я хочу сказать, что я хочу изменить метод рендеринга для боковой панели позже, тогда мне придется внести изменения в двух разных местах. В целом, я думаю, что это очень плохой подход
<Сильный> Подход 2
Внутри метода dosomething (), я могу иметь логическое утверждение, как так
route = getCurrentRoute()
if(route = "/routeA")
print A
else
print B
.
немного более элегантный, чем подход 1, но имея логическое утверждение внутри вашего взгляда, слишком слишком хаки.
В любом случае, мой вопрос, если я должен использовать подход 2 или есть лучший подход к этой проблеме?
Спасибо
Решение
Почему вы не позволяете SideBarview принять параметр какой вещи, которую вы хотите отобразить.
SideBarView = Backbone.View.extend({
print_value: B,
events: {...},
initialize: function(options){
options = options || {};
if(options.display === 'A'){
this.print_value = "A";
}
},
render: function(){ ...}
}
.
, а затем в вашем роутере:
route_method: function(path){
new SideBarView({display: path});
}
.