如何从骨干路由器中提取id参数

How to extract id param from Backbone Router

本文关键字:提取 id 参数 路由器      更新时间:2023-09-26

我有一个路由器设置如下:

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提供的,而不是从站点的根目录。

如果您从/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/5pushState: truehttp://localhost:12345/SomeApp/Scene/#5,没有它

是否忘记在backbone.js前加上下划线?

http://imstillreallybored.com/bb.html搜索/测试

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()));