2

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

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

4

2 回答 2

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没有它。

于 2013-06-03T21:48:07.793 回答
0

您是否忘记在主干.js 之前包含下划线.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()));
于 2013-06-03T13:23:20.393 回答