【问题标题】:Backbone Route not firing主干路由未触发
【发布时间】:2017-04-07 01:25:47
【问题描述】:

这应该是超级基本的,但我无法让路由工作。我应该提到该应用程序位于一个名为 /dist/ 的子目录中。这是我的代码:

    var QuestionRouter = Backbone.Router.extend({

    routes: {
      "/dist/" : "startTest"
      "dist/:id": "getModel"
    },

    startTest: function(){
      console.log('home called')
    },

    getModel: function(){
        app.getModel(id);
    }

});


  var app = new QuestionView;
  var appRouter = new QuestionRouter;
  Backbone.history.start({pushState: true});

触发该路由的 URL 是:

    www.example.com/dist/
    www.example.com/dist/12345

任何帮助将不胜感激。

【问题讨论】:

  • @EmileBergeron 它是如何重复的?有问题的代码有{pushState: true}
  • @TJ 这是重复的,因为 OP 想知道如何使用没有哈希的 Backbone URL。他正在使用pushState,但其余部分在副本中进行了解释。
  • @EmileBergeron 不确定有什么额外的信息可以解释为什么上面代码中的这些路由没有被触发?我看不到 OP 可以对他的代码进行哪些修改以使其根据建议的副本工作...
  • @TJ 在使用pushState 时,需要防止默认链接行为并改为调用Backbone.navigate 或使您的后端始终返回相同的索引页面,但这会扼杀一个无需重新加载的优势水疗中心。

标签: backbone.js backbone-routing


【解决方案1】:

您需要使用#(哈希符号)。

骨干路由器用于路由您的应用程序 URL 使用哈希标签(#)

这是来自 Backbone 教程的引用:What is a router?

Backbone's Router documentation

那么您的路线将是:

www.example.com/#/dist/
www.example.com/#/dist/12345

您也可以使用Backbone routes without hashes

【讨论】:

  • {pushState: true} 选项不需要此项
  • 如果pushState 不是预期目标,这可能有效。
  • 是的,你可以利用 html5 的 PushState 特性。请参阅前面提到的 stackoverflow 条目。来自backbonejs.org/#History:要表明您希望在应用程序中使用 HTML5 pushState 支持,请使用 Backbone.history.start({pushState: true})。
  • 我不能使用 /#/dist/ 因为文件位于子目录 dist.因此,如果我尝试 /dist/# 我仍然没有得到任何触发。
【解决方案2】:

好的,所以我能够解决这个问题:

  1. 我的路由哈希应该是这样的:

    路线:{ "" : "开始测试", ":id": "getModel" }

  2. 我不得不删除 pushState: true,这样就不会触发路由,不知道为什么:

    Backbone.history.start();

【讨论】:

    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多