如何在执行此Handlebars帮助程序后每次都执行一个函数执行?
Handlebars.registerHelper('renderPage', function() {
return new Handlebars.SafeString(Template[Session.get('currentPage')]());
});
这是在Meteor中运行的,我有一个路由器在Session中设置一个新的'currentPage',因为Session是被动的,这就是我用'currentpage'设置的模板。
我可以通过使用带有内容元素的模板来实现,然后使用Template.templateName.rendered,但这对我不起作用,因为我想将它作为一个包,我现在想,你可以'将模板放入陨石包中。
如果是,我可以这样做:
Template.renderPage.content = function {
return new Handlebars.SafeString(Template[Session.get('currentPage')]());
});
Template.renderPage.rendered = function () { ... }
答案 0 :(得分:1)
如果您希望每次运行帮助程序时都运行一个函数,为什么不将它定义为帮助程序的一部分呢?
Handlebars.registerHelper('renderPage', function() {
var ret = new Handlebars.SafeString(Template[Session.get('currentPage')]());
someFunctionYouWantToRun();
return ret;
});
更广泛地说,如果您希望您的函数和帮助程序在每次更改页面时运行,请创建包含其他页面的根级模板,然后将其附加到该页面的.rendered():
在 index.html :
中<body>
{{> root}}
</body>
root.html :
<template name="root">
{{#if CurrentPageIsHome}}
{{> home}}
{{/if}}
</template>
root.js 中的:
Template.root.currentPageIsHome = function() {
return Session.equals("currentPage", "home");
}
Template.root.rendered = function() {
// Code you want run on every template render of root and every subtemplate
}
更好的是,使用Meteor Router包。
答案 1 :(得分:0)
那么对我有用的是使用模板而不是帮助器。为了使这个模板能够从陨石包中运行,我必须将它们包装在Meteor.startup函数中,否则它就不会使模板变好。
Template.renderPage.content = function {
return new Handlebars.SafeString(Template[Session.get('currentPage')]());
});
Template.renderPage.rendered = function () { ... }
然后我使用Template.xxx.rendered函数进行后挂钩。