例子:
我正在编写一个处理博客文章列表的 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'})};
}
题
这两种方法之间有什么显着差异吗?是否有理由偏爱其中之一?一个能提供更好的性能吗?
非常感谢您的回答!
最佳答案
Are there any significant differences between those two methods? Does one deliver better performance?
不是真的,毕竟这只是设计选择。
Is there a reason to prefer one over the other?
我会坚持使用铁路由器 + 数据方法,原因如下:
Router.onBeforeAction("loading")
并且 loadingTemplate 改善了整体用户体验。 最后一点特别有趣,因为它允许你定义一个可重用的模板,你可以用它来显示最近的帖子列表、类别中的帖子列表、某个作者的帖子列表,因为你想要在第一名等...
<template name="postsList">
{{#each posts}}
{{> postListItem}}
{{/each}}
</template>
在这里,您可以将posts 定义为postsList 的助手,但最好让调用postsList 的父模板将posts 分配给它需要的任何内容。
template:"postsList",
data:function(){
return {
posts:Posts.find({
"author":this.params.author
})
};
}
这种设计模式允许我们定义一个提供数据上下文的路由,该数据上下文表示给定作者的帖子列表,但您也可以定义另一个提供数据上下文的路由,该数据上下文将按类别列出帖子。
因此,通过将数据提供者角色从模板助手移到路由定义,我们有一个更可重用的模板,这很好。
关于performance - 我应该在路由逻辑还是 Meteor Template Helper 中提供数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25384834/