如何在另一个模板渲染后重新运行/渲染一个流星模板助手?

fun*_*eah 6 javascript handlebars.js meteor

我在模板Nav中有一个名为{{renderNav}}的模板助手

例如

Template.Nav.renderNav
Run Code Online (Sandbox Code Playgroud)

在该辅助函数中,我想在另一个模板中解析另一个帮助器的渲染输出

例如助手

Template.contentWindow.content
Run Code Online (Sandbox Code Playgroud)

它提供了html

{{content}}
Run Code Online (Sandbox Code Playgroud)

我的renderNav帮助器想要分割替换{{content}}的html来生成html for

{{renderNav}}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?现在{{renderNav}}帮助程序执行或运行得更快,因此它无法解析替换{{content}}的html

@Hugo - 我按照你的建议在我的代码中执行了以下操作

Template.contentWindow.rendered = function() {
    debugger;  
    return Session.set('entryRendered', true);
};

Template.Nav.renderNav = function() {
    debugger;
    var forceDependency;
    return forceDependency = Session.get('entryRendered');
};
Run Code Online (Sandbox Code Playgroud)

当我运行它时,调试器在执行renderNav帮助程序时首先停止.(这与我在比赛条件方面所看到的有关).然后contentWindow呈现并且我点击Session.set上方的断点('entryRendered',true).但是然后renderNav不再按照你的建议再次运行.我是否误解或错误地实施了您的建议?

Hub*_* OG 4

您需要在要重新运行的模板中存在依赖项。可能性很小,具体取决于您想要获取什么数据。

例如,您可以在content模板中设置一个反应标记,该标记将通知renderNav绘图已完成。

Template.contentWidnow.rendered = function() {
    ...

    // Set this on the very end of rendered callback.
    Session.set('contentWindowRenderMark', '' +
        new Date().getTime() +
        Math.floor(Math.random() * 1000000) );
}


Template.renderNav.contentData = function() {
    // You don't have to actually use the mark value,
    // but you need to obtain it so that the dependency
    // is registered for this helper.
    var mark = Session.get('contentWindowRenderMark');

    // Get the data you need and prepare for displaying
    ...
}
Run Code Online (Sandbox Code Playgroud)

 


 

根据您提供的更多信息,我们可以创建这样的代码:

内容.js

Content = {};
Content._dep = new Deps.Dependency;
Run Code Online (Sandbox Code Playgroud)

内容窗口.js

Template.contentWidnow.rendered = function() {
    Content.headers = this.findAll(':header');
    Content._dep.changed();
}
Run Code Online (Sandbox Code Playgroud)

渲染导航.js

Template.renderNav.contentData = function() {
    Content._dep.depend();
    // use Content.headers here
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,这是休伯特,不是雨果:) (3认同)