1

我正在开发一个 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.

有没有办法将路线视为不区分大小写。

4

2 回答 2

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 }
    ]);

在你的情况下。

于 2013-08-28T21:17:30.033 回答
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,它显示每条指令都有一个包含路由正则表达式的配置属性。尝试设置它来修复您的路线匹配。

于 2013-09-07T14:17:58.037 回答