2

执行此 Handlebars 帮助程序后,如何每次都执行 aa 函数?

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 () { ... }
4

2 回答 2

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包。

于 2013-08-12T17:46:16.940 回答
0

所以对我有用的是使用模板而不是助手。为了让这个模板从一个陨石包中工作,我必须将它们包装在一个 Meteor.startup 函数中,否则它不会很好的模板。

Template.renderPage.content = function {
    return new Handlebars.SafeString(Template[Session.get('currentPage')]());
});

Template.renderPage.rendered = function () { ... }

然后我使用 Template.xxx.rendered 函数作为后钩。

于 2013-08-12T17:43:07.917 回答