2013-08-28 36 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属性。尝试设置,以解决您的路线匹配问题。