Javascript 如何从骨干路由器中提取id参数
我的路由器设置如下:Javascript 如何从骨干路由器中提取id参数,javascript,backbone.js,Javascript,Backbone.js,我的路由器设置如下: var Router = Backbone.Router.extend({ routes: { "/SomeApp/Scene/:id": "main", } main: function (sceneId) { console.log(sceneId); } }); 并在此处草签: $(document).ready(function () { var router = new Router();
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提供的,而不是从站点的根目录提供的。您是否忘记在backbone.js之前包含下划线.js?这里的例子很有效
如果您是从
/SomeApp/Scene
提供服务,则需要将其作为根
参数传递到主干。历史记录
:
$(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
没有它。你试过“SomeApp/Scene/:id”
?@jantimon是的。我还尝试调用Backbone.history.start({root:'/SomeApp',pushstate:true})
并将路由键更改为仅'Scene/:id'
,但这也不起作用。诚然,这是一种暗中操作。使用通用路由可以轻松检查路由的格式:'*path':'display'
和display:function(path){alert(path);}
。然后您应该能够正确配置根目录和路由。@Loamhoof谢谢您的想法。不幸的是,这导致path
为null
。此外,我是否正确地认为将{pushstate:true}
与pushstate兼容的浏览器(本例中为Chrome)一起使用意味着我不需要在URL中使用#
?我已经测试了有和没有,只是想知道。不,它们肯定都是按正确的顺序加载的(使用require.js)试着在路由的开头不要用斜杠,例如/Someapp/Scene到ex:Someapp/Scene我应该指出主干应用程序是从服务器上的/Someapp/Scene
提供的,不是从网站的根目录,所以我不想访问/#SomeApp/Scene/5
,否则它将提供网站的默认索引页(用于其他内容)。基本上,我只希望主干能够从路径SomeApp/scene/5
中检索场景id。是的,我尝试过使用和不使用前导斜杠。不走运:/I我想我已经尝试了root
value和route key的所有组合,但是是的,您的解决方案是有效的。谢谢你澄清了一切。我想我可能在一些尝试中输入了pushstate
,而不是pushstate
,但不要告诉任何人:)
routes: {
":id": "main",
}