2013-01-31 2 views
1

몇 가지 게시물에서 비슷한 문제를 언급했지만 아주 똑같은 내용은 아닙니다.여러 경로 백본에서 동일한 이벤트가 발생했습니다.

다음은 내 경로 파일의 상단에있는 스 니펫입니다.

각 경로에서 전역 이벤트를 호출하는 방법을 사용하고 있는지 궁금합니다. 내가 사용하는 이벤트는 #items 컨테이너를 지우는 것과 같이 꽤 표준적이고 간단한 이벤트입니다.

위에서 볼 수 있듯이 생성자의 "all"이벤트를 호출 한 다음 routes 파일에 정의 된 여러 메서드를 가리키고 있습니다.

제 질문은 여러 개의 화면에서 같은 글로벌 이벤트를 원합니다. 예를 들어, 모든 "카탈로그"화면. 나는 당신이 상상할 수있는 확신으로 나는 OU에게

@routeName = route.split(":")[1] 

# only substantiate the dropdown on User Catalog screen. 
if @routeName is "catalogScreen" or @routeName is "catalogPDFScreen" 

를 얻기 위해 약간의 이상하고 인정 하듯이 해키 트릭을 해 봤는데,이 적합하지 않으며 특히 깨끗합니다. 나는이 모든 글로벌 이벤트를 잡기 위해 라우터 파일을 건조하는 방법을 찾으려고 노력하고 있습니다. 그리고 이것이 내가 생각할 수있는 최선의 방법이었습니다.

routes: 
    ""          : "homeScreen" 
    "catalogs"        : "catalogsScreen" 
    "catalogs/:id"       : "catalogScreen" 
    "catalogs/:id/page/:page_id"    : "catalogScreen" 
    "catalogs/:id/pdf"      : "catalogPDFScreen" 
    "catalogs/:id/pdf/page/:page_id"   : "catalogPDFScreen" 
    "catalogs/:id/category/:category_id"  : "categoryScreen" 
    "departments/:id"       : "departmentScreen" 
    "notifications"       : "notificationsScreen" 
    "settings"        : "settingsScreen" 
    "products/:id"       : "productScreen" 
    "catalog/:catalog_id/search/:search_query": "searchCatalogScreen" 
    "search/:search_query"     : "searchScreen" 
    "login"         : "loginScreen" 
    "members/:member_id/catalogs/:catalog_id" : "userCatalogScreen" 
    "members/:member_id"      : "profileScreen" 
    ":user_name/:catalog_name"    : "" 

#extends router class to allow storing of routes for a history 
constructor: (options) -> 
    @on "all", @storeRoute 
    @on "all", @clearAlerts 
    @on "all", @clearScroll 
    @on "all", @setSearch 
    @on "all", @setNav 

미리 감사드립니다. 나는 백본으로 점점 더 경험이 많았지 만 분명히 배울 점이 많습니다. 일반적인 작업을 부착으로

"catalogs/:id(/page/:page_id)" 

:

경로 테이블 자체 DRY-다움의 측면에서

답변

1

, 당신은 동일한 루트를 공유 경로,하지만 서로 다른 매개 변수를 결합하는 옵션 router parameters에 대한 지원을 활용할 수 있습니다 ~ 일부 경로가 있지만 전부는 아니며 여러 가지 옵션이 있습니다. 가장 깨끗한 방법은 복수의 라우터로 라우터를 분할하는 것입니다 : URL의 경우 CatalogRouter 등입니다. 이는 라우터가 자연스럽게 응용 프로그램 구조에 매핑되는 경우에만 의미가 있습니다.

@on "routed:catalog", @foo 
@on "routed:catalog", @bar 
@on "routed:catalog", @baz 

또는 이벤트 핸들러 돈의 경우 : 당신이 당신의 라우터를 분할 할 수없는 경우

, 또 다른 방법은 경로의 다른

catalogScreen:(id, pageId) => 
    #normal route handling here 
    @trigger "routed:catalog" 

그리고에 대한 사용자 지정 이벤트를 트리거하는 것 경로 인수가 필요하지 않으므로 밑줄의 compose을 구문 해석 용 설탕에 사용할 수 있습니다.

@on "routed:catalog", _.compose @foo, @bar, @baz 
+0

이것은 아름답습니다! 고맙습니다. 매우 영리한 아이디어, 그리고 지금까지는 _.compose에 대해 알지 못했습니다. 매우 시원합니다. –

관련 문제