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

标签 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

最佳答案

您不应将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;

您可以使用 lang 路由的 afterModel 方法来确定所需的语言环境:

//../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 可能)。

关于javascript - 设置 rootURL 导致页面刷新时出现 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44902454/

相关文章:

javascript - jQuery 包装由 Div 中的 .Each 方法创建的元素

javascript - Javascript 中调用 Ajax 时函数(文本)的含义

javascript - 奇怪的 jQuery 鼠标悬停/移出行为

ember.js - 如何在我的Ember项目中使用SASS和SCSS

javascript - React如何在ListItem之间每次切换时调用componentDidMount

javascript - 正则表达式和 JavaScript : find word with accents

ember.js - 我应该在 Ember.js 的 Route 或 Controller 中过滤记录吗?

ember.js - EmberJS 2 中的路由更改通知组件

ruby-on-rails - Rails 4 - 未初始化的常量 SessionController

ruby-on-rails - Rails Devise Routes : If user signed in, 指向索引。否则,指向新用户 session