骨干动态路由,静态文件不会加载

时间:2014-08-11 16:28:53

标签: backbone.js express requirejs

我在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'而不是'/'?我怎么能补救这个?

如果需要任何其他详细信息,请与我们联系。非常感谢。

2 个答案:

答案 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) {

  },