backbone.js中的默认路径问题

时间:2011-07-21 16:32:48

标签: javascript backbone.js

我正在尝试创建我的第一个BB应用程序。它没问题,但我遇到了问题。我的路由器看起来像这样:

var PlayersAppRouter = Backbone.Router.extend({
    routes: {
        '': 'index',
    },

    initialize: function () {
        this.model = new PlayersAppModel({});
        this.view = new PlayersAppView({model: this.model});
    },

    index: function () {
        alert('It works'); //<-- It doesn't
    },
});

后来我的代码中有:

$(function () {
        window.app = new PlayersAppRouter;
        Backbone.history.start({pushState: true});

        app.model.players.reset(<?php require('players.php'); ?>); //<-- players.php loads a bunch of JSON data.
});

现在,为什么路由器的索引操作没有激活?我做错了什么?这段代码还有其他问题吗?

可以在此处找到完整的应用:http://development.zeta-two.com/development/f14/

3 个答案:

答案 0 :(得分:3)

摆脱你的pushState:true at it works

http://fiddle.jshell.net/r5TEk/9/show/

pushSate可能存在错误。见这里

https://github.com/documentcloud/backbone/issues/451

答案 1 :(得分:2)

使用正则表达式,在initialize函数中手动添加路径。

...
initialize: function() {
    this.route(/\/?/, 'index', this.index);
},
index: function() {
    alert('It works!');
},
...

这适用于{pushState: true}

http://jsfiddle.net/sergio/WpKPP/

http://jsfiddle.net/sergio/WpKPP/show

答案 2 :(得分:0)

不记得我在哪里读,买,我发现你必须在路由器上拨打initialize。这是我的工作示例,在jquery.ready函数内部触发。

MainView = new View.main();
appRouter = new Router();
// set up single page app with push state
Backbone.history.start({pushState: true});
appRouter.initialize();

路由配置。

routes: {
    "": "index"
}

使用@ serg.io回答this.route(/\/?/, 'index', this.index);导致它覆盖我的其他路线。