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

时间:2013-06-03 11:16:51

标签: 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();
    Backbone.history.start();
});

当我访问http://localhost:12345/SomeApp/Scene/5时,来自routes对象的路线不匹配,并且未调用main()

如果我使用空键创建路线,例如:

routes: {
    "": "main",
}

然后调用main(),但当然没有参数。

有人能指出我误解了路线参数的工作原理,和/或我应该如何设置路线?

感谢。

修改

我最初应该提到的一个重点是,应用程序是从服务器上的/ SomeApp / Scene提供的,而不是从站点的根目录提供的。

2 个答案:

答案 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/5pushState: truehttp://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()));