我应该在路由逻辑或 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 模板助手中提供数据吗?的主要内容,如果未能解决你的问题,请参考以下文章