我在meteor-i18n对象中有一个i18n翻译字符串列表,我正在迭代。而不是手动为每个字符串创建一个模板助手,这很快就会变得多余和重复,我想在循环中动态创建助手,如下所示:
for (var namespace in Meteor.i18nMessages) {
for (var msg in Meteor.i18nMessages[namespace]){
//Template[namespace][msg] = __(namespace + "." + msg); // <- works but is not reactive
Template[namespace][msg] = function() { // <- Doesn't work: always returns last value from object
return __(namespace + "." + msg);
}
}
}
然而,当我这样做时,我失去了反应能力。怎么会解决这个问题呢?我是最佳实践和优雅代码的粉丝。
感谢。
答案 0 :(得分:2)
您需要使用
预编译把手模板Meteor._def_template("templateName", function () {
return "your html"
});
这将在Template.templateName
处创建一个模板,该模板将与为其定义的助手进行反应。
EventedMind有一些截屏视频,详细说明了它的工作原理:
答案 1 :(得分:0)
我的文字编辑一直在叫我&#34;邪恶&#34;使用eval但这有效:
for (var namespace in Meteor.i18nMessages) {
var obj = {};
for (var msg in Meteor.i18nMessages[namespace]) {
var str = 'obj["' + msg + '"] = function() { return __("' + namespace + '.' + msg + '"); }';
console.log(str);
eval(str);
}
Template[namespace].helpers(obj);
}