【问题标题】:Duplicate routes called in Backbone.jsBackbone.js 中调用的重复路由
【发布时间】:2011-11-26 18:19:17
【问题描述】:

我想要一种像下面这样的 RESTful URL 结构:

  • /帐户
  • /accounts/account/123

我的路线是这样设置的:

MyRouter = Backbone.Router.extend({ 路线:{ '/accounts': '帐户', '/accounts/account/:account': '帐户', }, 帐户:函数(){ console.log('账户调用'); }, 帐户:函数(){ console.log('帐号被调用'); }, });

问题是,当我去 /accounts/account/123 时,两个 accounts()account() 被调用(因为 URL 匹配两个路由)。我尝试了诸如 /accounts$ 之类的路由,但它看起来在路由哈希中不受支持。

有没有办法做到这一点?手动 router.route(route, name, callback) 会起作用吗(尽管我真的不想这样做)。

【问题讨论】:

  • 你试过了吗:routes : { '/accounts/account/:account': 'account', '/accounts': 'accounts' },I.E.翻转它们?
  • 你好。我没试过。映射正确发生as per the docs。我只是好奇为什么要调用这些重复的函数。但是,当我直接调用 router.navigate 时,问题就解决了。但我仍在尝试找出如何处理浏览器栏和前进和后退按钮。

标签: javascript backbone.js


【解决方案1】:

another SO question 解决了这个问题。我没有意识到我必须严格使用 router.navigate 功能。

以编程方式使用路由器(而不是通过浏览器栏),那些重复的调用就会消失。在使用 router.navigate 时,我还看到预期的函数只调用了一次。

我仍然需要找出如何捕获后退和前进按钮来调用这些功能。感谢您迄今为止的反馈。

【讨论】:

    【解决方案2】:

    改用 /accounts$。 $ 是字符串结尾的正则表达式。

    【讨论】:

    • 我实际上在路由哈希中尝试了 /accounts$。但无济于事。如果我使用原始路由器函数 router.route(route, name, callback) ,它就可以工作。这很奇怪,因为所有的路线都被调用了。当我去 /accounts/accounts/account/123 等时,我只是接到重复的电话。
    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 2011-10-22
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2013-01-01
    相关资源
    最近更新 更多