【问题标题】:Backbone routing with arbitrary text带有任意文本的主干路由
【发布时间】:2020-03-26 16:20:27
【问题描述】:

我有一个页面从外部重定向到主干代码库。它有两个参数:

  • ID:整数
  • CODE:随机可打印的 ascii 字符串(无 #&?,但可以包括 - 并且始终包括 /

不确定CODE 参数是否已编码。如果需要,我想我可以让他们控制它。但目前的问题只是匹配。

我是一名维护程序员,而不是我最初的应用程序,所以只是尝试制作“适合”的代码。

大多数现有路由只使用一个 ID。例如

"account-edit-:accountId"    : "accountEditRoute"

但是如何将我的两个参数传递给我的流程路线。我试过了:

"process-:id-:code"    : "processCode"
"process-[^-]*-:code"  : "processCode"
"process-:id/:code"    : "processCode"
"process-:id/*"        : "processCode"

我的代码处理程序是这样的:

processCode: function(id, code) {
...
}

我总是得到未知的路由处理程序。那么我该如何匹配上面的内容。

对不起,如果这是一个愚蠢的问题 - 但他们(明智地)通常不会让我靠近前端,所以对我来说都是新事物。

【问题讨论】:

  • 所以我通过让调用页面在执行重定向时对CODE 参数进行%encode 来解决它。然后我在processCode 方法中对其进行解码。如果路由表本身有办法做到这一点,将留下问题,但现在有一个可行的解决方法

标签: javascript backbone.js backbone-routing


【解决方案1】:

我相信你必须使用带有正则表达式的Router-route 选项来做到这一点。路由哈希只能匹配简单的模式。

手动为路由器创建路由,路由参数可以是路由字符串或正则表达式。来自路由或正则表达式的每个匹配捕获都将作为参数传递给回调。

initialize: function(options) {

 // Matches #page/10, passing "10"
  this.route("page/:number", "page", function(number){ ... });

 // Matches /117-a/b/c/open, passing "117-a/b/c" to this.open
 this.route(/^(.*?)\/open$/, "open");

},

open: function(id) { ... }

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多