Backbone Routes - 页面加载时触发路由

时间:2013-10-10 01:07:50

标签: javascript backbone.js url-routing marionette

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

我有一个木偶路由器(如果我恐吓你,它与骨干路由器真的相同。很简单)。

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函数。尽管如此,它似乎不应该,但我真的不知道。

我想要它。

我不知道我做错了,或者我是否应该通过在页面加载时抓取我的页面网址来手动触发它,解析它,然后“导航”到该路由。看似hacky。

2 个答案:

答案 0 :(得分:3)

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

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

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

routes: {
    '/': someFunction
}

答案 1 :(得分:0)

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