动态创建流星把手模板助手?

时间:2013-05-01 08:39:27

标签: templates internationalization meteor handlebars.js meteorite

我在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);
    }
  }
}

然而,当我这样做时,我失去了反应能力。怎么会解决这个问题呢?我是最佳实践和优雅代码的粉丝。

感谢。

2 个答案:

答案 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);
}