【问题标题】:BackboneJS + Codeigniter pushState true not workingBackboneJS + Codeigniter pushState true 不起作用
【发布时间】:2014-02-14 12:33:13
【问题描述】:

所以我有这个 Backbone 应用程序,我在其中使用 Codeigniter 作为后端。由于某种原因,pushState:true 不起作用。

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

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

我的 app.js 有这个:

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

和我的导航模块,它呈现菜单链接,每个项目都有这个:

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' - 它可以工作,但它真的没有意义......

有谁知道这里的问题吗?

【问题讨论】:

    标签: codeigniter backbone.js backbone-routing


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗯是的...我刚刚发现的是,如果我输入http://localhost/project/mdk/#news - 页面加载并且URL 显示http://localhost/project/mdk/news - 以正确的方式显示所有内容!?什么?
    • 那是因为您的服务器正在响应localhost/project/mdk,然后 Backbone 正在处理“新闻”组件并更新 URL。再次,您的问题是当您访问 localhost/project/mdk/news 时,您的服务器没有响应 Backbone 应用程序
    【解决方案2】:

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

    我做了这个破解:

    $(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',
    

    这解决了问题,现在一切运行流畅..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多