2013-08-28 93 views
1

我正在使用durandal js 2.0應用程序。所有工作正常,除了我定義的路由區分大小寫。我也可以說,durandal 2.0的入門套件也有同樣的問題。Durandaljs 2.0路由區分大小寫

認爲這是我的路線。

router.map([ 
      { route: 'flickr', moduleId: 'viewmodels/flickr', nav: true } 
     ]); 

導航到

http://localhost/durandal#flickr 

作品沒有問題,但導航到

http://localhost/durandal#Flickr does not. 

是否有路由被視爲不區分大小寫的方式。

+1

爲什麼有人想要區分大小寫的URL?無論如何(配置)作爲默認行爲「注入」不區分大小寫的路由匹配嗎? – W3Max

+0

準確地說,我的觀點。 –

+0

根據規範,URI建議區分大小寫。主機名/域名不是,方案不是,而是路徑,查詢串和片段ID。在解析基於服務器的URL時,它是IIS的一個實現功能,不會考慮路徑中的情況,而Apache會強制區分大小寫。在客戶端URI的情況下,您正在查看的部分是一個片段ID,事實上,它與您的情況相關聯的是一個Javascript模塊。由於Javascript變量和HTML DOM元素ID屬性都區分大小寫,因此Durandal模塊路徑將存在於區分大小寫的環境中。 –

回答

4

如何將數組設置爲數組?這樣你可以迎合這兩種可能性。

router.map([ 
     { route: ['flickr', 'Flickr'], 
     moduleId: 'viewmodels/flickr', 
     title: 'flickr', 
     nav: true } 
    ]); 

如果太多可能的組合,以與陣列配合,唯一的選擇是正則表達式匹配。

羅布·艾森伯格提出了迪朗達爾1.x的這個解決方案:

router.mapNav({ name: "details", url: new RegExp('details', "i") , hash:'#/details', moduleId:'viewmodels/details'}); 

作爲最低要求,您必須包括的moduleId在路由映射到。如果它是一個導航路線,並且您正在將其數據綁定到哈希,那麼您還需要手動指定默認哈希。原因是我們無法自動派生moduleId或來自RegEx的散列。

這將轉化爲:

你的情況
router.map([ 
     { route: new RegExp('flickr', "i"), 
     moduleId: 'viewmodels/flickr', 
     title: 'flickr', 
     nav: true } 
    ]); 

+0

到什麼程度? flickr只是一個示例。我會有很多路線'all-javascript-books'或'All-JavaScript-Books',用戶可以輸入http://www.mywebsite.com#BOOKS/all-JAVASCRIPT-books ...什麼我會如何處理這些排列和組合?謝謝你的建議,雖然.. –

+0

我明白你的觀點。我沒有任何情況會讓用戶輸入一個複雜的網址,例如您建議的網址,但我可以想象它發生在較短的網址上。這個問題並不是真正的杜蘭達,這是一個JavaScript的東西。我編輯了我的答案,以顯示通過正則表達式處理此問題的方法。也許這將有助於? – TheMook

+1

這將是很好,如果它是默認行爲,而不是我必須提到的每一個我定義的路線。 –

0

您可以使用mapUnknownRoutes並針對默認路由列表以小寫字母搜索每個路由。這意味着所有的路線在創建時都會被縮小。

http://durandaljs.com/documentation/Using-The-Router/

這將通過使用

router.mapUnknownRoutes(function (instruction) { 
    Ko.arrayForEach(router.instructions, function(route) { 
     if (route.route === instruction.fragment) 
     // set route to this route 
}); 

我在我的iPad所以只是給你不說,它作爲一個建議來完成...

另一件事你可能能夠做的就是在路由器上設置正則表達式。查看API並顯示每條指令都有一個包含路由正則表達式的config屬性。嘗試設置,以解決您的路線匹配問題。