2013-01-22 4 views
6

에 대한 라우팅 나는 시나리오 다음 알아 내기 위해 노력하고있어 보는 항목 하나를 구입 하나Backbone.js : 중첩 된 뷰

내가 두 가지보기를 말할 수 있습니다. 캐치는 구매보기가보기위한 하위보기라는 것입니다. 라우팅을위한

는 내가 가진 :

var MyRouter = Backbone.Router.extend({ 
    routes: { 
    'item/:id': 'viewRoute', 
    'item/:id/buy': 'buyRoute' 
    } 
}); 

var router = new MyRouter; 

router.on("route:viewRoute", function() { 
    // initialize main view 
    App.mainview = new ViewItemView(); 

}); 

router.on("route:buyRoute", function() { 
    // initialize sub view 
    App.subview = new BuyItemView(); 
}); 

이제 사용자는 페이지를 새로 고쳐 buyRoute가 트리거됩니다하지만 지금은 더 기본보기가없는 경우. 이것을 처리하는 가장 좋은 해결책은 무엇입니까?

답변

0

지금 당장 가지고있는 문제는 BuyIt 내부에서 ViewItem 내부에 일부 내용을 표시하고 싶지 않다는 것입니다. 그렇다면 구매보기와 ViewItem이 공통적으로 가지고있는 것을 다른보기로 모듈화 한 다음 두 경로 모두에서 초기화해야합니다. 그것은 많은 의견 공유 할 수 있기 때문에 여기에

내 애플 리케이션

https://github.com/QuynhNguyen/Team-Collaboration/blob/master/app/scripts/routes/app-router.coffee

당신이 볼 수 있듯이 중 하나에서 코드 예제, 난 사이드 바을 모듈화. 나는 그것을 재사용 할 수 있고 충돌을 일으키지 않도록 그렇게했다.

0

메인보기의 존재 여부를 확인하고 이미 존재하지 않는 경우 만들거나 열 수 있습니다.

저는 일반적으로 앱을 부팅 할 때 내 앱의 주요보기를 만든 다음 열거 나 닫는 데 일종의보기 관리자를 만듭니다 (열지는 않음). 소규모 프로젝트의 경우 내 앱 객체의 views 속성에 내보기를 첨부하면 view.mainView, views.anotherView 등으로 한 곳에서 모두 액세스 할 수 있습니다.

또한 Backbone.View를 확장합니다. openclose은 DOM에보기를 추가/제거 할뿐만 아니라보기에 isOpen 플래그도 설정합니다. 이와

, 당신과 같이, 다음, 필요한 뷰가 이미 열려 있는지 확인하지 않을 경우 열 수 있습니다 :

if (!app.views.mainView.isOpen) { 
    // 
} 

옵션 추가가 clearViews을라는 응용 프로그램의 방법을 만들 것 clearViews에 매개 변수로 전달 된보기의 이름을 제외하고 열려있는보기를 지울 수 있습니다. 따라서 일부 경로에서 지우려는 navbar보기가있는 경우 app.clearViews('topNav')을 호출하면 views.topNav를 제외한 모든보기가 닫힙니다.

체크 아웃이의 모든 코드에 대해이 요점 : https://gist.github.com/4597606

+0

커피 스크립트에 위의 코드, 당신이 좋아하는 경우 : https://gist.github.com/4597528 – georgedyer