Javascript 如何使用Iron Router(Meteor)在一个区域中渲染模板
我的目标是在Meteor网站上动态创建导航菜单 我有一个带有静态链接的经典菜单,我希望在需要时插入其他链接:Javascript 如何使用Iron Router(Meteor)在一个区域中渲染模板,javascript,templates,meteor,iron-router,Javascript,Templates,Meteor,Iron Router,我的目标是在Meteor网站上动态创建导航菜单 我有一个带有静态链接的经典菜单,我希望在需要时插入其他链接: <nav id="menu"> <a href="#link1">Link 1</a> <a href="#link2">Link 2</a> {{> yield "navLinks"}} </nav> 例如,当连接管理员时,每个模块(帖子、角色、类别…)都应该在该区域中插入自己的链
<nav id="menu">
<a href="#link1">Link 1</a>
<a href="#link2">Link 2</a>
{{> yield "navLinks"}}
</nav>
例如,当连接管理员时,每个模块(帖子、角色、类别…)都应该在该区域中插入自己的链接,但发生的情况是,每个模块都呈现在前一个模块上,并删除另一个模块添加的链接,因此该区域似乎只接受要呈现的一个模板
也许我做错了,所以请给我一个干净的解决方案
--编辑--
好吧,也许有更好的解释:
我有几个可以启用或禁用的模块(帖子、用户、角色等),每个模块都有一个导航菜单来管理它
现在我想在一个名为{{nav}的独特区域中显示它们的菜单。
因此,如果模块被启用,我必须在每个模块的某处编写代码,将它们的菜单附加到{{nav}}区域
我真的很想使用模板来实现这一点,因为我可以直接将逻辑构建到模板中,而不是使用集合来存储链接。您之所以看到这样的问题,是因为您正在使用
Router.onAfterAction()
函数来呈现菜单模板。问题是,Router.onAfterAction()
函数全局应用于所有路由,并在运行新路由时运行。这就是为什么您只看到最终定义的导航链接定义中的导航链接,在您上面的问题中,导航链接是usersMenu
导航链接。相反,您希望为希望其有所不同的每条路线定义导航菜单模板渲染逻辑。另外,您不希望使用onAfterAction()
函数,因为这是为了在路由实际运行后用于后处理。为了实现您的愿望,您将执行以下操作:
Router.route('/admin/posts', {
...
yieldRegions: {
'postsMenu': {to: 'navLinks'}
}
...
});
Router.route('/admin/users', {
...
yieldRegions: {
'usersMenu': {to: 'navLinks'}
}
...
});
因此,正如您所见,我们已经为您的问题中指定的每个唯一路由定义了路由定义,一个用于管理员帖子,一个用于管理员用户。为了为给定路线指定要呈现为命名的yield
s的特定模板,您应该使用yieldRegions
route选项。在其中,您可以指定要渲染到哪个命名区域的每个模板的名称。这是您根据问题指定模板的地方
如果您想了解定义路线定义时可用的所有路线特定选项,请查看。查看。在我给出答案之前,我想知道,您是只希望在用户导航到某个页面后将这些“导航链接”添加到导航链接列表中,还是希望在应用程序加载时立即将它们全部添加到导航链接列表中?在应用程序加载时动态添加或完全添加这些链接将决定您对此问题所需的解决方案。@n4tiv3pwnst4r:我希望在URL匹配/admin/posts/*时显示帖子链接,我不希望在需要时随时看到它们。如果我的回答为您的问题提供了解决方案,请务必将其标记为回答谢谢,但事实上这并不能解决我的问题,我的意思是,是的,相应的菜单显示在右侧页面上,但问题是,在呈现到{{navLinks}}后,我无法将其他链接附加到{{navLinks}}中,因此如何做到这一点?我说的是模块,每个模块都有自己的链接,所以它们应该能够呈现到相同区域{{navLinks}的链接。
Router.route('/admin/posts', {
...
yieldRegions: {
'postsMenu': {to: 'navLinks'}
}
...
});
Router.route('/admin/users', {
...
yieldRegions: {
'usersMenu': {to: 'navLinks'}
}
...
});