BackboneJS + Codeigniter pushState true无法正常工作

时间:2014-02-14 12:33:13

标签: codeigniter backbone.js backbone-routing

所以我有这个Backbone App,我在后端使用Codeigniter。出于某种原因,pushState:true不起作用。

所以,我的骨干应用程序的main.js有这个:

Backbone.history.start({ pushState: true, root: App.ROOT });

我的app.js有这个:

var App = {
    ROOT: '/projects/mdk/'
};

和我的导航模块,它呈现了menulinks,每个项目都有:

this.insertView(new ItemView({
model: new Navigation.ItemModel({
    href: App.ROOT + 'home',
    class: 'home',
    triggers: 'home',
    route: this.route
   })
}));

及其模型:

Navigation.ItemModel = Backbone.Model.extend({
    defaults: {
        href: '',
        text: '',
        triggers: [],
        route: ''
    }
});

我从中得到的是“找不到页面”......

添加:当我在视图中将其更改为href:'#news'时 - 它有效,但它确实没有意义......

有谁知道这个问题?

2 个答案:

答案 0 :(得分:0)

从文档(http://backbonejs.org/#History):

  

请注意,使用真实网址需要您的网络服务器能够   正确呈现这些页面,因此需要进行后端更改   好。例如,如果您的路线为/ documents / 100,则表示您的网站   如果浏览器访问该URL,则服务器必须能够提供该页面   直接

问题是您的服务器没有响应您的应用所使用的任何网址。对于Backbone应用可以访问的每个网址,您的服务器必须会返回一个有效的HTML网页(包含您的Backbone应用)。

答案 1 :(得分:0)

好的,我自己找到了一个解决方案:

我做了这个黑客:

$(document).on('click', 'a:not([data-bypass])', function (evt) {

    var href = $(this).attr('href');

        if (href && href.indexOf('#') === 0) {
            evt.preventDefault();
            Backbone.history.navigate(href, true);
        }
    });

然后我做了:

href: '#home',

这解决了问题,现在evereythings流畅地运行..