1

我正在迭代的 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);
    }
  }
}

但是,当我这样做时,我会失去反应。如何解决这个问题?我是最佳实践和优雅代码的粉丝。

谢谢。

4

2 回答 2

2

您需要使用预编译车把模板

Meteor._def_template("templateName", function () { 
    return "your html"
});

这将创建一个模板,Template.templateName该模板将与为其定义的助手进行反应。

EventedMind 有一些截屏视频,详细展示了它是如何工作的:

于 2013-05-01T10:40:06.243 回答
0

我的文本编辑器一直称我为使用 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);
}
于 2013-05-01T21:28:40.653 回答