gpt4 book ai didi

javascript - 如何在另一个模板渲染后使 meteor 模板助手重新运行/渲染?

转载 作者:数据小太阳 更新时间:2023-10-29 05:15:53 26 4
gpt4 key购买 nike

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

例如

Template.Nav.renderNav

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

例如助手

Template.contentWindow.content

提供html
{{content}}

我的 renderNav 助手想要分割替换 {{content}} 的 html 以生成

的 html
{{renderNav}}

我该怎么做?现在 {{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');
};

当我运行它时,调试器在执行 renderNav 助手时首先停止。 (这对我所看到的竞争条件而言是有道理的)。然后 contentWindow 呈现,我在 Session.set('entryRendered', true) 上方设置了断点。但是 renderNav 不会像您建议的那样再次运行。我是否误解或错误地执行了您的建议?

最佳答案

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

例如,您可以在 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
...
}


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

content.js

Content = {};
Content._dep = new Deps.Dependency;

contentWindow.js

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

renderNav.js

Template.renderNav.contentData = function() {
Content._dep.depend();
// use Content.headers here
...
}

关于javascript - 如何在另一个模板渲染后使 meteor 模板助手重新运行/渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17584522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com