문제

그래서 와 같은 항목 목록이있는 사이드 바보기가 있습니다.

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

이제 두 가지 다른 경로에서 사이드 바보기를 표시하려고하지만 약간의 문제가 발생했습니다. Route A에서 DoSomething () 메서드가 "A"를 인쇄하고 Route B에서 DoSomething () 메서드를 "B"를 인쇄하기를 원합니다. 그래서, 나는이 문제에 가장 적합한 방법이 무엇인지 궁금해하고 있었습니까? 나는 그것에 대해 생각하고 다음과 같은 2 가지 접근법을 생각해 냈지만 충분히 우아한 것 같지 않습니다.

접근법 1

다른 사이드 바르기를 만들고 IT 사이드 바르바 뷰 2를 호출 한 다음 DoSomethingForRouteb에 dosomething을 변경하십시오. 그래서 나는 루트 B를 위해 SideBarView2를 사용할 수 있습니다. 그러나 이것은 건조 원리를 위반했습니다. 언급하지 않으려면 나중에 나중에 사이드 바르기의 렌더링 방법을 변경하고 싶습니다. 두 개의 다른 곳에서 변경해야합니다. 전반적으로, 이것은 매우 나쁜 접근이 있다고 생각합니다

접근 2

DoSomething () 메서드 내에서, 나는 그렇게 logic 문을 가질 수 있습니다

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

접근법보다 조금 더 우아하지만보기 안에 논리적 진술을 갖는 것은 조금 너무갑니다.

어쨌든, 내 질문은 접근법 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