【问题标题】:Backbone router is not routing "new" route correctly骨干路由器未正确路由“新”路由
【发布时间】:2012-12-20 00:25:59
【问题描述】:

我正在尝试将 Backbone 用于我最新的 Rails 项目,而我面临的最新问题是路由。

对于我的 Rails 路由,我让用户在登录后转到 /products (index_products_path)。

所以,我在 Backbone 中创建了以下路由。我打算为不同的“页面”(如邀请)创建其他主干路由器。

class Sample.Routers.ProductsRouter extends Backbone.Router

  routes:
    ""         : "index"
    ":id"      : "show"
    ":id/edit" : "edit"
    "new"      : "newProduct"

“mydomain.com/products”调出索引视图。 "mydomain.com/products/#/1" 或 "mydomain.com/products#1" 显示产品 id = 1 的显示视图。

现在,问题在于“新”路径。当我尝试通过指向“mydomain.com/products#new”来显示“新”视图时,服务器抱怨它找不到 id=new 的产品。

我真的不明白为什么会发生这种情况。当我跟踪错误堆栈时,我可以看到正在调用 Sample.Routers.ProductsRouter.ProductsRouter.show。似乎主干路由器没有正确路由这个......并且Rails服务器只是响应id = new的产品的“GET”请求......这可能是某种主干​​配置错误吗?

任何帮助将不胜感激!

【问题讨论】:

    标签: ruby-on-rails backbone.js


    【解决方案1】:

    Backbone 执行第一个匹配的路由。所以在你的情况下,把new放在第一位。

      routes:
        ""         : "index"
        "new"      : "newProduct"
        ":id"      : "show"
        ":id/edit" : "edit"
    

    【讨论】:

    • 感谢您的快速答复,西蒙!现在我因为不知道非常琐碎的事情而感到很傻。 :(
    • 无法保证这将在任何地方(或任何地方)都有效,JavaScript 对象是无序的,因此您看到的任何顺序都是偶然的。如果您需要按特定顺序检查路线,则必须使用 route 调用手动添加它们。
    • @muistooshort 按照标准你是对的,尽管目前每个实际的浏览器都按顺序循环对象(如果我是正确的,Chrome 在 2008 年就有一个错误)。我想要遵守当前的标准,最佳做法是“命名空间”任何带有名字的路由变量;例如product/:id
    猜你喜欢
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    相关资源
    最近更新 更多