对发布/订阅和返回结果感到困惑

时间:2013-04-02 21:06:53

标签: meteor publish-subscribe

我正在使用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;
 };

我的问题是,事情应该以这种方式完成吗?我们将列表助手返回与发布时使用的查询相同吗?

1 个答案:

答案 0 :(得分:1)

您可以将查询光标提供给#each Handlebars函数。事实上,它是推荐的。通过这种方式,将对DOM进行智能更新:当文档添加到Cursor时,Handlebars将仅为该文档创建新的DOM节点,而不为已存在的文档重新创建DOM节点。当您提供数组时,这

所以第三段代码可以是:

Template.show_people.users = function () {
     return Meteor.users.find({});
};

另请注意, collection.find()完成客户端只会查看miniMongo存储中的文档...您进行搜索通过整个服务器数据库,但只能通过服务器发布给您的文档。

因此,只有在Meteor.publish()函数中才需要复杂的,面向角色的逻辑。