我应该在路由逻辑或 Meteor 模板助手中提供数据吗?

Posted

技术标签:

【中文标题】我应该在路由逻辑或 Meteor 模板助手中提供数据吗?【英文标题】:Should I Provide Data In Routing Logic or Meteor Template Helper? 【发布时间】:2014-10-12 15:17:41 【问题描述】:

示例:

我正在编写一个处理博客文章列表的 Meteor 应用程序。所有博客文章都存储在一个名为“帖子”的集合中。我使用 Iron Router 进行路由。

我想向用户显示由特定作者创建的所有帖子的列表。此列表将使用空格键显示。因此,我需要将数据提供给模板。

问题:

据我所知,有两种方法可以做到这一点:

    使用模板助手 使用我的路线的“数据”属性

选项 1 示例:

Template.postList.helpers(
postsToDisplay: function()
    return Posts.find(author: 'someAuthor');

)

选项 2 示例:

//Inside my route
data: function()
    return postsToDisplay: Posts.find(author: 'someAuthor');

问题

这两种方法有什么显着差异吗?有理由偏爱其中一个吗?是否提供更好的性能?

非常感谢您的回答!

【问题讨论】:

【参考方案1】:

这两种方法有什么显着差异吗?是否提供更好的性能?

不是真的,毕竟只是设计选择。

有理由偏爱一个吗?

我会坚持铁路由器+数据的方法,原因如下:

只有在从服务器获取的数据准备就绪时,您才可以使用 waitOn 实际显示列表,使用 Router.onBeforeAction("loading") 和 loadingTemplate 可改善整体用户体验。

您可以设计一个与数据无关的帖子列表模板,您可以使用不同的上下文提供该模板。

最后一点特别有趣,因为它允许您定义一个可重用的模板,您可以使用该模板显示最近的帖子列表、类别中的帖子列表、某个作者的帖子列表首先要实现,等等......

<template name="postsList">
  #each posts
    > postListItem
  /each
</template>

在这里您可以将帖子定义为postsList 的助手,但最好让调用postsList 的父模板将帖子分配给它需要的任何内容。

template:"postsList",
data:function()
  return 
    posts:Posts.find(
      "author":this.params.author
    )
  ;

此设计模式允许我们定义一个路由,该路由提供一个数据上下文,该数据上下文表示给定作者的帖子列表,但您也可以定义另一个提供数据上下文的路由,该数据上下文将按类别列出帖子。

因此,通过将数据提供者角色从模板助手转移到路由定义,我们有了一个可重用性更高的模板,这很好。

【讨论】:

以上是关于我应该在路由逻辑或 Meteor 模板助手中提供数据吗?的主要内容,如果未能解决你的问题,请参考以下文章

Meteor:从另一个助手访问模板助手(或变量)

Meteor - 从子助手访问父模板变量

为啥 Meteor 模板助手不在上下文中返回变量?

使用 Backbone 路由器重新渲染 Meteor 页面

如何在模板助手中使用 Meteor 方法

在模板上下文中从另一个助手调用一个助手 (Meteor 0.9.4)