meteorjs在渲染之前运行js

meteorjs在渲染之前运行js,meteor,meteor-blaze,Meteor,Meteor Blaze,是否可以在呈现模板之前执行javascript脚本 如果可能的话,我不想用熨斗路由器做这件事 在我的项目中,有一个脚本可以翻译模板中的几个单词。这些翻译必须从文件中读取,因此在正确的输出出现之前会有延迟。现在我想从一开始就读取整个文件,并将其保存在缓存中。保存此模板后,模板将获得正确的单词 然后我想完成模板渲染 大概是这样的: // Client only Handlebars.registerHelper('translate', function(stringPart) { retur

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

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


{{{#如果translationsReady}}
{{>yourTemplate}
{{/if}
if(Meteor.isClient){
registerHelper(“translationsReady”,function()){
return!!Session.get(“翻译”);
});
UI.registerHelper(“翻译”,函数(键){
返回会话。获取(“翻译”)[key];
});
//假设您的翻译来自Meteor.call:
Meteor.call(“翻译”、“en-US”、函数(错误、结果){
如果(!错误){
会话集(“翻译”,结果);
}
});
}

这将使用
会话
。你也可以使用一个本地的代码>流星。集合<或代码>或者你自己的代码> DEPS。依赖性< /Cord>对象,如果它更适合你的需要。

不是直接的答案,但是你是否考虑使用?我不想使用现有的包来翻译我的文本。我试着为我和我的学校项目写我自己的包。这是一个好主意!谢谢你的解答。我将对此进行一些讨论,但这不是我想在我的案例中使用的解决方案。我可以把它写在问题里。。。我正在寻找的最佳解决方案是,我不必为每个模板编写自己的模板助手。。。我想象的最好的解决方案是,我可以全局编写它,这样一个人就可以下载并使用我的包,而无需使用“等待”处理程序编辑每个模板。如果你的包阻止了全局模板的初始加载,我认为使用它的开发人员不会很高兴;)-这有点像UX噩梦。无论如何,我展示的两个助手函数都是全局助手-
UI。registerHelper
把手的新替代品。registerHelper
。因此,
translationready
translation
帮助程序都将是全局帮助程序。但等待呈现特定状态的模板(例如,订阅集合)并不少见。因此,在我看来,模板在渲染之前等待翻译完成是很重要的。我不敢相信没有一种方法来定义这个全局性-例如(但在我看来不是最好的方法):Router.waitGlobalyFor=function(){//translate…return true;};