Backbone: 路由区分大小写

创建于 2015-04-12  ·  5评论  ·  资料来源: jashkenas/backbone

应该有一个选项可以将路由设置为区分大小写或不区分大小写

像这样的东西

var Router = Backbone.Router.extend({
    routes: {
        "/": "home"
    },
    ignoreCase:true
});
change wontfix

所有5条评论

为您的路线和标志 i 使用正则表达式(不区分大小写)。 例如:/正则表达式/i

var Router = Backbone.Router.extend({
    routes: {
        /regex/i: "home"
    }
    ....
});

您可以在#initialize手动添加不区分大小写的正则表达式路由。

我了解 URL 的规范指定区分大小写,但是您的解决方案需要与指定路由的正常方式有很大偏差这一事实可能会引起很多麻烦。 有无数的网络软件偏离了官方规范,因为事实证明官方规范没有考虑一些重要的用例。 我并不是建议您在默认行为中偏离规范,而是不提供关闭区分大小写的选项,因为“这就是规范”忽略了对该行为的所有实际需求。 我们在 IIS 上运行 .NET,两者都不需要区分大小写的 URL,因此要求我们所有的开发人员返回并修复分散在整个项目中的所有数千个 URL 只是为了满足规范是行不通的发生。 有关于此的堆栈溢出问题,人们在网上发布黑客和解决方法,所有这些都是因为您将 W3C 的规范优先于实际的真实用户。

如果您不允许将此作为​​选项,请至少在主干(当前处于闭包中)中公开相关代码,以便我们可以在不修改原始源代码的情况下覆盖此行为。

事实上,规范实际上并没有说 URL区分大小写:

“一般来说,URL 是区分大小写的(机器名称除外)。可能存在 URL 或 URL 的一部分,大小写无关紧要,但识别这些可能并不容易。用户应始终认为 URL 是大小写的-敏感的。/u"

“一般”!=“必须。” 它说用户应该始终认为它们区分大小写,但这是因为如果他们不这样做,如果路由器/服务器配置为区分大小写,他们可能无法正确使用。

我觉得如果 apache 可以开箱即用地配置为不区分大小写,Backbone 应该也是一样的。

在路由器的根目录包含大小写错误的情况下,此解决方案也无济于事。

例如,如果应用程序不在域的根目录上,例如www.example.com/MyApp ,那么当用户键入www.example.com/myapp时,您的正则表达式解决方案将无济于事

此页面是否有帮助?
0 / 5 - 0 等级