Ember.js重新呈现区域设置更改的链接

时间:2018-02-06 16:15:56

标签: javascript ember.js localization single-page-application ember-i18n

我的应用程序使用ember-i18n插件。出于搜索引擎优化的目的,我想在URL中添加/ [lang-code] /。

更改语言时,history.pushState可以更改URL,但是,即使router.rootURL已更改,页面上的链接也不会更改为新语言。

到目前为止,我只能更改window.location.pathname,但是正在进行新的网络请求。

我尝试重写href-to helper(从ember-href到addon)并添加了这个:

_recomputeOnLocaleChange: Ember.observer('i18n.locale', function() {
    console.log("here?");
    this.recompute();
})  

它在区域设置更改时执行,但显然重新计算不执行任何操作。即使使用setTimeout(因为rootURL可能还没有改变)。链接都是一样的。

你能提出什么建议吗?非常感谢!谢谢!!

1 个答案:

答案 0 :(得分:0)

didTransition文件的router.js挂钩中,检查区域设置是否已更改,并将服务上的属性设置为新区域设置(如果有)。然后在你的助手中,你可以检查那个属性。

router.js

oldI18nLocale: null,

didTransition() {
  this._super(...arguments);

  // ...

  let i18nLocale = this.get('locale.i18n');
  if (i18nLocale !== this.get('oldI18nLocale')) {
    this.set('someService.i18nlocale', this.get('locale.i18n');
  }
  this.set('oldI18nLocale', i18nLocale));
}

在你的帮手中:

recomputeOnLocaleChange: Ember.observer('someService.i18nLocale', function() {
    this.recompute();
})

希望这有效。