所以我有这个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'
时 - 它有效,但它确实没有意义......
有谁知道这个问题?
答案 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流畅地运行..