Вопрос

У меня есть вид на боковую панель со списком элементов, как так

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top