我正在研究durandal js 2.0应用程序。一切正常,除了我定义的路由区分大小写。我还可以说durandal 2.0的入门套件也有同样的问题。
将此视为我的路线。
router.map([
{ route: 'flickr', moduleId: 'viewmodels/flickr', nav: true }
]);
导航到
http://localhost/durandal#flickr
没有问题,但导航到
http://localhost/durandal#Flickr does not.
是否有办法将路由视为不区分大小写。
答案 0 :(得分:4)
如何将路由设置为数组?这样你就可以迎合两种可能性。
router.map([
{ route: ['flickr', 'Flickr'],
moduleId: 'viewmodels/flickr',
title: 'flickr',
nav: true }
]);
如果有太多可能的组合来满足数组的需要,唯一的选择就是正则表达式匹配。
Rob Eisenberg为Durandal 1.x建议了这个解决方案:
router.mapNav({ name: "details", url: new RegExp('details', "i") , hash:'#/details', moduleId:'viewmodels/details'});
至少,您必须包含该路由映射到的moduleId。如果它是导航路由并且您正在对其哈希进行数据绑定,那么您还需要手动指定默认哈希。原因是我们无法从RegEx自动派生moduleId或哈希。
这将转化为:
router.map([
{ route: new RegExp('flickr', "i"),
moduleId: 'viewmodels/flickr',
title: 'flickr',
nav: true }
]);
在你的情况下。
答案 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属性。尝试设置它来修复您的路线匹配。