簡體   English   中英

呈現出車手幫手后如何執行功能

[英]How to execute a function after a handlebars helper has been rendered

執行此Handlebars助手之后,如何每次都能獲得一個要執行的函數?

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

這是在Meteor中運行的,我有一個在Session中設置新“ currentPage”的路由器,因為Session是反應性的,這將渲染我用“ currentpage”設置的模板。

我可以通過使用帶有content元素的模板,然后使用Template.templateName.rendered來做到這一點,但這對我不起作用,因為我希望將此作為一個包,而現在我認為,您不能放置模板裝入隕石包中。

如果是,我可以做:

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

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

如果您希望函數在每次運行該助手時都運行,為什么不將其定義為助手的一部分呢?

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

因此,對我來說有效的是使用模板而不是幫助器。 為了使該模板在隕石包中工作,我必須將它們包裝在Meteor.startup函數中,否則將無法對模板進行優化。

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

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

然后,我將Template.xxx.rendered函數用於事后掛鈎。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM