【问题标题】:How to render templates in one region with Iron Router (Meteor)如何使用 Iron Router (Meteor) 在一个区域渲染模板
【发布时间】:2015-06-23 13:15:18
【问题描述】:

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

我有一个带有静态链接的经典菜单以及我希望在需要时插入其他链接的产量:

<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}} 区域。

我真的很想使用模板来做到这一点,因为我可以直接在其中构建逻辑,而不是使用集合来存储链接。

【问题讨论】:

  • 看看this。它可能会为您提供一些见解。
  • 在我提供答案之前,我想知道,一旦用户导航到某个页面,您是否只想将这些“导航链接”添加到导航链接列表中,或者您是否想要它们全部在应用程序加载时立即添加?在应用程序加载时动态添加它们而不是完全添加它们将决定您解决此问题所需的解决方案。
  • @n4tiv3pwnst4r :我想在例如 URL 匹配 /admin/posts/* 时显示帖子链接,我不想在任何时候看到它们,只是当我需要它们。
  • 如果我的回答为您的问题提供了解决方案,请务必将其标记为答案

标签: javascript templates meteor iron-router


【解决方案1】:

您看到问题的原因是因为您使用 Router.onAfterAction() 函数来呈现菜单模板。这样做的问题是Router.onAfterAction() 函数全局应用于所有路由,并在运行新路由时运行。这就是为什么您只能看到最终定义的导航链接定义中的导航链接,在您上面的问题的情况下,这将是 usersMenu 导航链接。相反,您希望为您希望它有所不同的每条路线定义导航菜单模板呈现逻辑。此外,您不想使用 onAfterAction() 函数,因为它旨在用于在您的路线实际运行后进行后处理。为了实现您想要的,您将执行以下操作:

Router.route('/admin/posts', {
    ...
    yieldRegions: {
        'postsMenu': {to: 'navLinks'}
    }
    ...
});

Router.route('/admin/users', {
    ...
    yieldRegions: {
        'usersMenu': {to: 'navLinks'}
    }
    ...
});

因此,如您所见,我们为您在问题中指定的每条独特路线定义了一个路线定义,一个用于管理员帖子,一个用于管理员用户。为了为给定的路由指定要渲染到名为yields 的特定模板,您应该使用yieldRegions 路由选项。在其中,您指定要渲染到哪个命名的屈服区域的每个模板的名称。这是您从问题中指定模板的地方。

如果您想了解定义路由定义时可用的所有路由特定选项,请查看here

【讨论】:

  • 谢谢,但实际上它并没有解决我的问题,我的意思是,是的,相应的菜单显示在右侧页面上但是,问题是我无法将其他链接附加到 {{navLinks}}渲染后怎么做? 我说的是模块,每个模块都有自己的链接,因此它们应该能够呈现指向同一区域 {{navLinks}} 的链接。
猜你喜欢
  • 2014-01-16
  • 2015-12-22
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2014-01-03
  • 2013-11-23
  • 2015-03-06
  • 1970-01-01
相关资源
最近更新 更多