我正在使用meteor,我对发布/订阅文档与使用把手#each items
助手向客户查询/返回集合之间的关系感到有点困惑。
据我所知,通过发布和订阅某些文档,当事情发生变化时,我会在客户端浏览器上获得被动更新。
我发现我的自编写非常复杂(面向角色)发布函数并编写等效项以将项返回给客户端。例如,
Meteor.publish("directory", function () {
var user = Meteor.users.findOne({_id:this.userId});
//role and logic left out on purpose
return Meteor.users.find({}, {fields:{emails:1, profile:1}});
});
和订阅
if (Meteor.userId() != null) {
Meteor.subscribe("directory");
}
模板称为show people和帮助者'users'
Template.show_people.users = function () {
users = Meteor.users.find({}).fetch();
return users;
};
我的问题是,事情应该以这种方式完成吗?我们将列表助手返回与发布时使用的查询相同吗?
答案 0 :(得分:1)
您可以将查询光标提供给#each Handlebars函数。事实上,它是推荐的。通过这种方式,将对DOM进行智能更新:当文档添加到Cursor时,Handlebars将仅为该文档创建新的DOM节点,而不为已存在的文档重新创建DOM节点。当您提供数组时,这不。
所以第三段代码可以是:
Template.show_people.users = function () {
return Meteor.users.find({});
};
另请注意, collection.find()完成客户端只会查看miniMongo存储中的文档...您不进行搜索通过整个服务器数据库,但只能通过服务器发布给您的文档。
因此,只有在Meteor.publish()函数中才需要复杂的,面向角色的逻辑。