meteorjs在渲染之前运行js

时间:2014-04-09 12:49:59

标签: meteor meteor-blaze

是否可以在呈现模板之前执行javascript脚本?

想要使用铁路由器 - 如果可能的话。

在我的项目中有一个脚本可以翻译模板中的几个单词。这些翻译必须从文件中读出,因此在输出正确之前会有延迟。我现在想要在开头读取整个文件并将其保存在缓存中。保存后,模板会获得正确的单词。

然后我想完成模板渲染。

这样的事情:

// Client only
Handlebars.registerHelper('translate', function(stringPart) {
   return 'translated String'; // this string comes from function "prepareTranslate" which saves the values
});

var prepareTranslate = function(){
   [...]
   // preparing completed:
   Meteor.renderCurrTemplates();
}();

1 个答案:

答案 0 :(得分:1)

最简单的方法就是阻止在您的翻译准备好{{#if}}块之前呈现单个模板:

<body>
  {{#if translationsReady}}
    {{> yourTemplate}}
  {{/if}}
</body>
if (Meteor.isClient) {
  UI.registerHelper("translationsReady", function() {
    return !!Session.get("translations");
  });

  UI.registerHelper("translate", function(key) {
    return Session.get("translations")[key];
  });

  // assuming your translations are coming from a Meteor.call:
  Meteor.call("translations", "en-US", function(error, result) {
    if (!error) {
      Session.set("translations", result);
    }
  });
}

这使用Session。如果更符合您的需求,您还可以使用本地Meteor.Collection或您自己的Deps.Dependency对象。