设置rootURL会导致页面刷新时出现404错误

时间:2017-07-04 09:43:15

标签: javascript ember.js routes router

如果我将语言设置为rootURL,这可行,我可以转到任何路由/子路由,当前语言将出现在URL中,但在页面刷新浏览器尝试从该语言文件夹获取应用程序的任何想法? :/我正在使用Ember 1.11。

// router.coffee

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

Router = Ember.Router.extend
  location: config.locationType
  rootURL: '/' + localStorage.getItem('locale') + '/'

// config/environment.js

module.exports = function(environment) {
  var ENV = {
    locationType: 'history',
    baseURL: '/'
...

enter image description here

1 个答案:

答案 0 :(得分:1)

您不应将rootURL用于此目的。而是创建一条路线,该路线将成为所有其他路线的父路线:

//../app/router.js

import Ember from 'ember';
import config from './config/environment';
var Router = Ember.Router.extend(
    {
        location: config.locationType
    }
);
Router.map(
    function ()
    {
        this.route(
            'lang', { path: '/:lang' }, function ()
            {
                this.route('index', { path: '/' });
                this.route('404', { path: '/*wildcard' });
                this.route('your-route-name');
            }
        );
    }
);
export default Router;

您可以使用afterModel路由的lang方法来确定所需的区域设置:

//../app/routes/lang.js
import config from '../config/environment';
export default Ember.Route.extend(
    {
        afterModel: function (params)
        {
            var allowedLocales = config.i18n.allowedLocales;
            var defaultLocale = config.i18n.defaultLocale;
            this.set(
                'i18n.locale',
                params && params.lang && allowedLocales.indexOf(params.lang) > -1 ? params.lang : defaultLocale
            );
        }
    }
);

index路由中,您需要从浏览器的设置中检测用户的区域设置或使用默认区域:

//../app/routes/index.js
import config from '../config/environment';
export default Ember.Route.extend(
    {
        beforeModel: function ()
        {
            var allowedLanguages = config.i18n.allowedLocales;
            var language = config.i18n.defaultLocale;
            if (navigator.languages) {
                for (let lang of navigator.languages) {
                    if (allowedLanguages.indexOf(lang) > -1) {
                        language = lang;
                        break;
                    }
                }
            } else {
                if (navigator.language) {
                    language = navigator.language;
                } else {
                    if (navigator.userLanguage) {
                        language = navigator.userLanguage;
                    }
                }
            }
            this.transitionTo('lang.index', { lang: language });
        }
    }
);
顺便说一下,你的Ember版很老了。您可能希望将其升级到1.13(1.13.x不应该破坏您的应用,2.x可以)。