我在Backbone动态路由方面遇到了一些困难。我已经设置了一个服务于Backbone SPA的Express应用程序。我的路由配置如下:
var AppRouter = Backbone.Router.extend({
routes: {
...
'project': 'project',
'project/:id': 'project',
...
},
...
project: function(id) {
var projectView = new ProjectView();
if (id) {
projectView.render();
}
else {
projectView.render();
}
},
...
});
var initialize = function(){
var router = new AppRouter;
var headerView = new HeaderView();
var footerView = new FooterView();
Backbone.history.start({
pushState: true
});
};
标准路由工作正常,但当我尝试访问http://localhost:5000/project/1
时,不会加载静态文件。通过查看js控制台,看起来好像该页面正在http://localhost:5000/project/css/...
而不是http://localhost:5000/css/...
查找静态文件。有人遇到过这个问题吗?
另一个例子:我正在使用require.js,我的主文件位于/js/app
。该页面尝试在/project/js/app
找到该文件,当然,该文件不存在。它是否将根网址混淆为'/ project'而不是'/'?我怎么能补救这个?
如果需要任何其他详细信息,请与我们联系。非常感谢。
答案 0 :(得分:1)
事情是如何运作的!它与Backbone无关。
解决方案1 :(禁用pushState)
Backbone.history.start({
//pushState: true
});
这将阻止浏览器相对查看静态文件的错误位置,因为URL将具有主干路由的hash / hashBang后缀。
解决方案2:使用css&的绝对路径js文件。
<link href="http://myexample.com/css/styles.css"/>
一些有用的链接
http://www.coffeecup.com/help/articles/absolute-vs-relative-pathslinks/
http://jeffreybarke.net/2013/06/paths-and-urls-relative-and-absolute/
答案 1 :(得分:0)
我想那些骨干路线不会像那样工作。您需要为&#39; project /:id&#39;设置另一项功能。
示例:
routes: {
...
'project': 'project',
'project/:id': 'projectWithId',
...
},
...
project: function() {
},
projectWithId: function(id) {
},