2

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

私にとってうまくいっているのは、ヘルパーの代わりにテンプレートを使用することです。このテンプレートを meteorite パッケージから機能させるには、それらを Meteor.startup 関数でラップする必要がありました。

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

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

そして、after フックに Template.xxx.rendered 関数を使用します。

于 2013-08-12T17:43:07.917 に答える