Durandaljs 2.0路由区分大小写

时间:2013-08-28 17:05:47

标签: durandal

我正在研究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.

是否有办法将路由视为不区分大小写。

2 个答案:

答案 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属性。尝试设置它来修复您的路线匹配。