我的路由器设置如下:
var Router = Backbone.Router.extend({
routes: {
"/SomeApp/Scene/:id": "main",
}
main: function (sceneId) {
console.log(sceneId);
}
});
并在此处初始化:
$(document).ready(function () {
var router = new Router();
Backbone.history.start();
});
当我访问http://localhost:12345/SomeApp/Scene/5
时,来自routes
对象的路线不匹配,并且未调用main()
。
如果我使用空键创建路线,例如:
routes: {
"": "main",
}
然后调用main(),但当然没有参数。
有人能指出我误解了路线参数的工作原理,和/或我应该如何设置路线?
感谢。
修改
我最初应该提到的一个重点是,应用程序是从服务器上的/ SomeApp / Scene提供的,而不是从站点的根目录提供的。
答案 0 :(得分:1)
如果您从/SomeApp/Scene
投放,则需要将其作为root
参数传递给Backbone.history
:
$(document).ready(function () {
var router = new Router();
Backbone.history.start({pushState: true, root:'/SomeApp/Scene/'});
});
如果您打算不使用哈希(#
),则应该传递pushState: true
,否则它将无法匹配。
路线:
routes: {
":id": "main",
}
以上内容将匹配:http://localhost:12345/SomeApp/Scene/5
与pushState: true
和http://localhost:12345/SomeApp/Scene/#5
不匹配。
答案 1 :(得分:0)
您是否忘记在backbone.js之前加入underscore.js?这里的示例有效
http://imstillreallybored.com/bb.html#search/test
var Router = Backbone.Router.extend({
routes:{
"search/:query": "search"
},
search: function(search){
alert('search ' + search);
}
});
var app_router = new Router();
Backbone.history.start();
//app_router.navigate('#search/' + $.trim($(this).val()));