【问题标题】:Meteor 1.3: How to create a client only collection containing some fields from the users db collection?Meteor 1.3:如何创建一个仅包含来自用户数据库集合的一些字段的客户端集合?
【发布时间】:2016-04-17 07:57:02
【问题描述】:

我想将所有用户发布到客户端(最终将只是所有用户的“个人资料”字段):

服务器上的发布是这样的:

Meteor.publish('users', function users() {
    return Meteor.users.find();
});

在我的模板中,我有一个如下所示的订阅:

Template.Users_show_page.onCreated(function usersShowPageCreated() {
    this.subscribe('users');
});

但是“用户”变量不可用,我仍然必须通过 Meteor.users 访问用户,例如在以下代码中:

Template.Users_show_page.helpers({
    users() {
        return Meteor.users.find();
    }
});

这是为什么?

我认为我需要使用我选择的名称(即“用户”)创建一个客户端集合,然后我可以访问该集合。

我在哪里执行此操作以及如何与数据库中的用户进行同步?

【问题讨论】:

  • 我不确定我是否理解您期望可用的内容。是什么让您认为这样的变量将可用?你能详细说明你预计会发生什么吗?
  • 我希望在 users() 函数中我能够返回 users.find(),而不是 Meteor.users.find()
  • 好吧,users 集合位于 Meteor 命名空间下,但您始终可以创建文件范围 users 变量。发布更新集合,它不会创建任何全局变量。无论如何,使用Meteor.users 有什么问题?
  • 这是因为在我看来,我正在从服务器发布一个名为“用户”的字符串。在客户端上,我订阅了一个名为“users”的字符串。从逻辑上讲,我想通过字符串 'users' 访问该订阅
  • @MasterAM。没什么,只是没有意义。但感谢您的评论,我现在知道它不会创建我认为正在发生的全局变量

标签: meteor


【解决方案1】:
MyCollection = new Meteor.Collection('foo');

Meteor.publish('myPublication', function() {
    return MyCollection.find();
});

上面的代码不会在任何地方创建myPublication 变量。它只是发布/订阅的名称。您甚至可以在同一个集合上拥有多个不同的订阅。此代码为您通过 MyCollection 对象访问的 foo Mongo 集合返回一个游标。

因此,您的代码不需要创建新的Mongo.Collection。只需使用Meteor.users,因为这是已经链接到MongoDB 中“用户”的Mongo.Collection 对象。

如果你真的想访问用户变量中的文档,你仍然需要按照你的建议创建帮助器,尽管你最好使用 Meteor.users 而不是下面的帮助器:

Template.template_name.helpers({
    users: function(){ return Meteor.users.find() }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多