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

标签 javascript aurelia

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

所有这一切都非常有效,直到用户切换语言。这是作为完整页面刷新实现的,首选语言存储在服务器端 session 中。所以模板解析器确实接受了语言变化。问题是 Aurelia 模板已经缓存在客户端,其中有错误的翻译。

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

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

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

最佳答案

尝试将此添加到您的 main.js 以使用语言查询字符串逻辑猴子修补模板加载器:

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) {
  ...

这是一个例子:https://gist.run/?id=de8ec2de79511bf9e873

关于javascript - 配置模板加载器以传递额外参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35801597/

相关文章:

javascript - Javascript 中具有多个值的动态键值数组

javascript - 外部库引用在 Webpack 中有效,但在 Aurelia 内的 JSPM 中无效

javascript - 如何在 Aurelia 中使用 JQuery-UI

javascript - 隐藏 dc.js 行图中的指定行

php - AJAX 发送变量到 PHP 不工作

javascript - Protractor 按包含空格的标题获取 div

node.js - Protractor :检查链接是否包含特定文本。预期 [ true, true ] 为 [ true, true ]

javascript - 将 Admin LTE 与 Aurelia 结合使用

Aurelia CLI 包括 Bootstrap Glyphicons

javascript - 如何将多个元素插入到多维数组的同一个索引中?