【问题标题】:Backbone Routes - trigger route on page loadBackbone Routes - 在页面加载时触发路由
【发布时间】:2013-10-17 14:27:45
【问题描述】:

这是一个简单的问题,但我是路由新手,无法找到答案。

我有一个木偶路由器(如果我吓到你,它和骨干路由器真的是一回事。非常简单)。

sys.routes = {
  "app/:id": "onAppRoute",
};

sys.Router = new Marionette.AppRouter({
  controller: {
    onAppRoute: function(route) {
      console.log('Called app route!');
    },
  },
  appRoutes: sys.routes,
});

Backbone.history.start({pushState: true})  

这可行 - 如果您点击浏览器的后退按钮,网址将在我的单页应用程序中更改,并调用 onAppRoute 函数。

但是,假设我打开一个新的浏览器窗口并将我的页面网址粘贴到某个“应用程序”:

http://localhost/app/myApplication

这不会调用onAppRoute 函数。虽然它甚至看起来不应该,但我真的不知道。

我想要它。

我不知道我是否做错了,或者我是否应该通过在页面加载时抓取我的页面 url,对其进行解析,然后“导航”到该路线来手动触发它。看起来很老套。

【问题讨论】:

    标签: javascript backbone.js url-routing marionette


    【解决方案1】:

    与您的直觉相反,主干的默认行为是在页面加载时触发匹配路由!参看。 http://backbonejs.org/#Router - 寻找选项silent: true。您必须指定路由器在页面加载时忽略匹配的路由,即不触发相应的回调。

    所以您的问题出在其他地方:您的路线与您作为示例所述的 url 不匹配。显然,您需要一个:id 参数,尾随http://localhost/app/myApplication。因此,http://localhost/app/myApplication/213 将导致您的回调在页面加载时触发,因为您没有将 silent: true 作为选项传递给 backbone.history.start()

    如果你想匹配 'root' url,即没有参数,你可以定义以下路由:

    routes: {
        '/': someFunction
    }
    

    【讨论】:

    • 谢谢,你是对的 - 昨天几个小时后,我发现我不知何故路由不正确。注意 - 我确实有一个 id - 那是 myApplication,但你指向了正确的方向。很高兴知道这一点 - 谢谢。
    • John Spartan stackoverflow.com/questions/20017210/… 你能帮帮我吗? :D
    • 也许它改变了,但似乎你必须使用空字符串而不是'/'来定义默认路由。
    【解决方案2】:

    :id 部分是一个参数,它将由 Backbone.Router 提取并作为参数发送给 onAppRoute。 但是在您的 URL 中,您没有任何参数 /localhost/app/myApplication

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2013-12-02
      • 1970-01-01
      相关资源
      最近更新 更多