作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Knockout.js V3 和 RequireJS 开发 SPA。
我有这样写的 ko 组件:
define(['text!settings.html'],
function( htmlString) {
'use strict';
function SettingsViewModel(params) {
...
}
// Return component definition
return {
viewModel: SettingsViewModel,
template: htmlString
};
});
现在我想支持本地化,为此我为每种支持的语言复制了 html,例如:
en/settings.html
de/settings.html
se/settings.html
我想让用户更改语言并使用新语言刷新应用程序,是否可以指示 require text 插件将语言前缀添加到所有 html,所以当我写:
text!settings.html
它实际上会加载:
text!de/settings.html
最佳答案
不确定是否可以让文本插件为 url 添加前缀。您可以做的是创建自定义模板加载器:
var templateFromLanguageUrlLoader = {
loadTemplate: function(name, templateConfig, callback) {
if (templateConfig.languageUrl) {
// Language from config or default language
var lang = templateConfig.lang || 'de';
var fullUrl = lang + '/' + templateConfig.languageUrl;
$.get(fullUrl, function(markupString) {
ko.components.defaultLoader.loadTemplate(name, markupString, callback);
});
} else {
// Unrecognized config format. Let another loader handle it.
callback(null);
}
}
};
// Register it
ko.components.loaders.unshift(templateFromLanguageUrlLoader );
然后你的组件看起来像这样:
define([],
function() {
'use strict';
function SettingsViewModel(params) {
...
}
// Return component definition
return {
viewModel: SettingsViewModel,
template: {
languageUrl: 'settings.html',
language: 'nl' // overwrite default
}
};
});
关于javascript - RequireJS:如何为路径添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27248043/
我是一名优秀的程序员,十分优秀!