配置模板加载器以传递额外参数

时间:2016-03-04 16:50:20

标签: javascript aurelia

我正在研究i18n的Aurelia组件。我想渲染服务器端的翻译,因为我们的翻译存储在CMS中,可以在部署后更新。我已经成功编写了一个Java WebFilter,它可以在返回模板之前拦截对Aurelia模板的请求并转换字符串。

所有这一切都很有效,直到用户切换语言。这是作为整页刷新实现的,首选语言存储在服务器端会话中。因此,模板解析器确实提取了语言更改。问题是Aurelia模板已经被客户端缓存,其中包含错误的翻译。

我现在使用的一个解决方法是禁用模板的缓存。但理想情况下,我希望浏览器缓存模板,直到语言发生变化,此时应再次请求模板。

一个简单的解决方案是将语言添加到模板请求的URL中。这样,一旦语言发生变化,就不会使用缓存的模板。 (如果用户决定更改语言,我们可以再次从缓存中加载它们.Hurray!)

我试图实现这个,但是我找不到关于(默认)加载器的任何文档。我可以将其配置为将语言作为参数添加到模板URL吗?或者我可以创建自定义加载程序来添加此行为吗?

1 个答案:

答案 0 :(得分:2)

Try adding this to your main.js to monkey patch the template loader with the language query string logic:

import {TextTemplateLoader} from 'aurelia-loader-default';

// capture the standard logic in a new "standardLoadTemplate" method.
TextTemplateLoader.prototype.standardLoadTemplate = TextTemplateLoader.prototype.loadTemplate;
// intercept calls to "loadTemplate" and add the query string before calling the standard method.
TextTemplateLoader.prototype.loadTemplate = function(loader, entry) {
  entry.address += '?' + 'en-US'; // todo: set based on currently selected language
  return this.standardLoadTemplate(loader, entry);
};

export function configure(aurelia) {
  ...

Here's an example: https://gist.run/?id=de8ec2de79511bf9e873