骨干路由匹配不起作用

时间:2012-07-20 11:08:04

标签: javascript url backbone.js backbone-routing

我有三条这样的路线:

var appRouter = Backbone.Router.extend({
    routes: {
        "": "index",
        "questionnaire/info/id/:id": "questionnaireInfo",
        "questions/edit/*params": "questionEdit"
    },
    questionnaireInfo: function(id) {
        $('#app-body').load('/dashboard/questionnaire/info/id/' + id);
    },
    questionEdit: function(questionnaireId) {
        console.log(questionnaireId, params);
    },
    index: function() {
        console.log('index');
    }
});

我将它们初始化为:

var appRouting = new appRouter;
Backbone.history.start({
    pushState: true,
    silent: false,
    root: '/dashboard/'
});

在第一页加载路由匹配时,它甚至是console.log正确的消息。但我有一个像这样的链接元素:

<a href="/dashboard">Home Page</a>

它与""路线不匹配。并且此href元素与"questionnaire/info/id/:id"路由不匹配:

<a href="/dashboard/questionnaire/info/id/1">Load</a>

我怎样才能使这个工作?感谢。

4 个答案:

答案 0 :(得分:0)

也许你错过了'/ dashboard'和每条路线之间的'/'

答案 1 :(得分:0)

指数解雇?通常,骨干文档建议列出从最具体到最不具体的路线。可能没有调用其他根,因为"":"index"捕获了所有内容。

答案 2 :(得分:0)

Backbone.history.start调用root参数时,您需要一个尾部斜杠。

var appRouting = new appRouter;
Backbone.history.start({
    pushState: true,
    silent: false,
    root: '/dashboard/'
});

您可以在文档中的example for Backbone.history中看到这一点。

答案 3 :(得分:0)

我遇到了同样的问题。似乎调用路由的链接必须以“#”字符作为前缀。所以如果路由器的根目录是

/dashboard/

,您的路线是

"questionnaire/info/id/:id": "questionnaireInfo"

比触发路线的链接应该是例如

<a href="/dashboard/#/questionnaire/info/id/1">Load</a>

希望这有帮助。