繁体   English   中英

如何使用Iron Router(Meteor)在一个区域中渲染模板

[英]How to render templates in one region with Iron Router (Meteor)

我的目标是在Meteor网站上动态创建导航菜单。

我有一个包含静态链接和yield的经典菜单,我希望在需要时插入其他链接:

<nav id="menu">
    <a href="#link1">Link 1</a>
    <a href="#link2">Link 2</a>

    {{> yield "navLinks"}}
</nav>

--

// module_posts.js
Router.onAfterAction(function(){
    if (userIsAdmin()) {
        this.render('postsMenu', { to: 'navLinks' });
    }
});

// module_users.js
Router.onAfterAction(function(){
    if (userIsAdmin()) {
        this.render('usersMenu', { to: 'navLinks' });
    }
});

问题是,例如,当管理员连接时,每个模块(帖子,角色,类别...)应在该区域中插入自己的链接,但是发生的情况是每个模块都在前一个模块上进行渲染并删除链接由另一个模块添加,因此该区域似乎仅接受要渲染的一个模板。

也许我做错了,所以请给我一个干净的解决方案。

-编辑-

好的,也许是一个更好的解释:我有几个可以启用或禁用的模块(帖子,用户,角色等),每个模块都有一个导航菜单来管理它。

现在,我想在一个名为{{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 ,应使用yieldRegions路由选项。 在其中,您可以指定要渲染到哪个命名产量区域中的每个模板的名称。 在这里,您可以从问题中指定模板。

如果您想了解定义路径定义时可用的所有特定于路径的选项,请在此处查看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM