Ember手动URL更改不加载页面

时间:2016-08-31 20:45:17

标签: ember.js coffeescript url-routing

我有一个使用Coffeescript和Ember 2.7.1的EmberJS应用程序。

我将/重定向到/student

当我打开我的应用程序时,让我们说www.something.com/~somebody/dist/(是的,我需要~somebody/dist部分),它按预期转到www.something.com/~somebody/dist/student

我还有其他页面,例如/settings。如果我使用link-to帮助程序转到设置页面,则可以正常运行。当我手动将网址从www.something.com/~somebody/dist/student更改为www.something.com/~somebody/dist/settings时,它不会加载该网页。

我收到无法加载资源:服务器响应状态为404(未找到)错误。

知道如何解决这个问题吗?

我的 router.coffee 文件:

`import Ember from 'ember'`
`import config from './config/environment'`

Router = Ember.Router.extend
    location: config.locationType,
    rootURL: config.rootURL

Router.map ->
    @route 'student'
    @route 'settings'
    @route 'statistics'
    @route 'directory'

`export default Router`

我的 routes / index.coffee 文件:

`import Ember from 'ember'`

IndexRoute = Ember.Route.extend
  beforeModel: ->
      @transitionTo('student')

 `export default IndexRoute`

我的 routes / settings.coffee 文件:

`import Ember from 'ember'`

SettingsRoute = Ember.Route.extend()

`export default SettingsRoute`

我的 routes / student.coffee 文件:

`import Ember from 'ember'`

StudentRoute = Ember.Route.extend()

`export default StudentRoute`

我的 environment.js 文件:

    /* jshint node: true */

module.exports = function(environment) {
  var ENV = {
    modulePrefix: 'something-frontend',
    environment: environment,
    rootURL: '/',
    locationType: 'auto',
    EmberENV: {
      FEATURES: {
        // Here you can enable experimental features on an ember canary build
        // e.g. 'with-controller': true
      }
    },

    APP: {
      // Here you can pass flags/options to your application instance
      // when it is created
    }
  };

  if (environment === 'development') {
    // ENV.APP.LOG_RESOLVER = true;
    // ENV.APP.LOG_ACTIVE_GENERATION = true;
    // ENV.APP.LOG_TRANSITIONS = true;
    // ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
    // ENV.APP.LOG_VIEW_LOOKUPS = true;
  }

  if (environment === 'test') {
    // Testem prefers this...
    ENV.baseURL = '/';
    ENV.locationType = 'none';

    // keep test console output quieter
    ENV.APP.LOG_ACTIVE_GENERATION = false;
    ENV.APP.LOG_VIEW_LOOKUPS = false;

    ENV.APP.rootElement = '#ember-testing';
  }

  if (environment === 'production') {
      ENV.location = 'hash';
      ENV.rootURL = '/~somebody/dist'
  }

  return ENV;
};

3 个答案:

答案 0 :(得分:1)

最后,我解决了在environment.js中将locationType设置为hash的问题。 nil

http://emberjs.com/api/classes/Ember.Location.html#toc_hashlocation

答案 1 :(得分:0)

您需要设置路线才能让您的应用程序进入。请确保您有routes / settings.js文件。

答案 2 :(得分:0)

这不是ember的问题,而是http服务器配置。您应该将您的http服务器配置为将所有与文件不匹配的请求重定向到index.html。

在nginx中,您可以使用以下内容:

location /~user/dist/ {
  try_files $uri $uri/ /index.html?/$request_uri;
}