Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从骨干路由器中提取id参数_Javascript_Backbone.js - Fatal编程技术网

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",
}