0

是否可以在呈现模板之前执行 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();
}();
4

1 回答 1

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

于 2014-04-09T14:45:10.003 回答