2013-05-19 103 views
1

我想配置我的路由,以便導航到#/ my顯示#/文件夾/ 62(或某個存儲在變量中的某個ID)的內容 - 並導航到#/ public顯示#/文件夾/ 1(相同的概念)。Durandal路由 - 路由到具有特定ID的資源?

此外,我希望應用程序加載時導航到這些路線之一,具體取決於用戶是否通過身份驗證。身份驗證的東西已經完成,但一旦上面的路線已經配置好了,我想在其中的一個上激活。

這是我有:

 activate: function() { 
     router.useConvention(); 
     router.handleInvalidRoute = function (route, params) { 
      //debugger; 
      logger.logError("Invalid route", route, null, true); 
     }; 

     router.map([     
      { url: 'home', moduleId: 'viewmodels/home', name: 'Home', visible: false },    
      { url: 'my', moduleId: 'viewmodels/folder', name: 'My Content', visible: false }, // Should display contents of /folder/2 
      { url: 'public', moduleId: 'viewmodels/folder', name: 'Public Content', visible: false }, // Should display contents of /folder/3 
      { url: 'set/:id', moduleId: 'viewmodels/set', name: 'Set', visible: false }, 
      { url: 'folder/:id', moduleId: 'viewmodels/folder', name: 'Folder', visible: false } 
     ]); 

     if (auth.isAuthenticated) 
      return router.activate('my'); // should show details page of a particular folder 
     else { 
      return router.activate('public'); // should show details page of a particular folder 
     } 
    } 

回答

2

https://groups.google.com/forum/#!searchin/durandaljs/app.setRoot/durandaljs/t1hrLfOh1oM/RtCekmY0bDAJ描述app.setRoot可以用來顯示身份驗證/未通過認證的用戶不同的看法。

如果只有經過身份驗證的用戶才能在示例中看到「folder/specialID」的內容,那麼您可以考慮不要通過路由器公開這些內容。在#my中使用標準組合功能來代替加載specialID視圖/視圖模型。

+0

謝謝Rainer。我想有條件地激活,如果可能的話......根已被設置爲shell,我不想改變它。另外,關於我的問題的第一部分的任何想法?如何配置我的應用程序,使瀏覽到/文件夾/我的瀏覽器顯示/文件夾/ 23(但保持在文本中的網址,而不是ID)? – SB2055