2016-07-24 53 views
0

在router.map訪問子路由器的功能,我有以下幾點:迪朗達爾:從外殼

{ route: '01_02_003*details', moduleId: 'viewmodels/chapter2/01_02_003', title: 'Chapter 2 Page 3', nav: true },

在shell.js我有以下。所有與子路由器一起工作,但我希望shell.js中的Next和Back按鈕能夠複製1.js,2.js,3.js,4.js內部的Next和Back按鈕的功能和5.js,它們是子路由器視圖模型。有沒有辦法從shell.js引用子路由器viewmodel函數?從子路由器,我可以直接調用$ shell.functionNameHere或$ shell.observableNameHere,但反過來似乎不起作用。

 createChapter2Router: function() { 
 
      if (!$shell.chapter2Router) { 
 
       $shell.chapter2Router = router.createChildRouter() 
 
        .makeRelative({ 
 
        moduleId: 'viewmodels/chapter2/childRouter', 
 
        fromParent: true 
 
       }).map([ 
 
        { route: ['', '1'], moduleId: '1', title: 'Chapter 2 - Child Router', type: 'intro', nav: true }, 
 
        { route: ['2'], moduleId: '2', title: 'Chapter 2 - Child Router', type: 'intro', nav: true }, 
 
        { route: ['3'], moduleId: '3', title: 'Chapter 2 - Child Router', type: 'intro', nav: true }, 
 
        { route: ['4'], moduleId: '4', title: 'Chapter 2 - Child Router', type: 'intro', nav: true }, 
 
        { route: ['5'], moduleId: '5', title: 'Chapter 2 - Child Router', type: 'intro', nav: true }, 
 
       ]).buildNavigationModel(); 
 
      } 
 
     },

回答

0

你答得相當緊密耦合的孩子外殼,如果你這樣做。實現你在這裏要求的最好方法是使用event pub/sub capability of Durandal

實質上,每個子viewmodel將在加載時訂閱事件,並在關閉時取消訂閱。外殼上有前進/後退按鈕,當它們被點擊時,只需發佈​​「ForwardNavigationRequested」或「BackwardNavigationRequested」事件,然後當前的子頁面就會相應地處理這些事件。