这是一个简单的问题,但我是路由的新手,并且无法找到答案。
我有一个木偶路由器(如果我恐吓你,它与骨干路由器真的相同。很简单)。
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。
答案 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