3

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

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

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})  

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

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

http://localhost/app/myApplication

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

我想要它。

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

4

2 回答 2

3

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

因此,您的问题出在其他地方:您的路线与您作为示例所述的 url 不匹配。显然,您需要一个:id参数 trailing http://localhost/app/myApplication。因此,http://localhost/app/myApplication/213如果您没有silent: true作为选项传递给backbone.history.start().

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

routes: {
    '/': someFunction
}
于 2013-10-10T10:48:32.203 回答
0

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

于 2013-10-10T01:38:17.707 回答