我有一个Questions
集合,我使用SimpleSchema在文件“collections.js”中定义了这个集合,它位于questions> lib中。如何在集合帮助器中获取未登录用户的用户名?
此集合有一个askedBy
字段。它是一个存储提问问题的人员的用户标识的字符串数组。
askedBy: {
type: [String],
optional: true
},
在另一个文件中,问题>服务器> publish.js,我有:
Meteor.publish("questions", function() {
questionList = Questions.find(
{},
{
fields: {
"_id": 1,
"questiontext": 1,
"createdAt": 1,
"askedBy": 1,
"slug": 1
}
}
);
return questionList;
});
我的目标是让谁问可问题的用户的姓名,即用户名与'askBy'数组中的ID相对应的用户。
我该怎么做?
事情我至今尝试过:
在collections.js:
Questions.helpers({
askedByUsers: function() {
console.log("askedBy:");
console.log(Meteor.users.findOne(this.askedBy[0]));
return Meteor.users.findOne(this.askedBy[0]);
},
失败的原因Meteor.users
似乎只能访问用户的详细信息,当前登录。对于其他用户提出的所有问题,它将返回一个空值。
于是我尝试添加这publish.js:
Meteor.publish("allUsers", function() {
return Meteor.users.find({},
{
"name": 1,
});
});
和Meteor.subscribe("allUsers");
既collections.js以及questions.js(其中有我所有的模板助手和事件处理程序)。我也将收集帮手改为:
Questions.helpers({
askedByUsers: function() {
console.log("askedBy:");
console.log(allUsers.findOne(this.askedBy[0]));
return allUsers.findOne(this.askedBy[0]);
},
但即使这样也行不通。
我做错了什么,以及如何获取未登录用户的用户名?
编辑:万一这是很重要的 - 文件夹结构
├── client
├── modules
│ ├── admin
└── questions
├── client
│ ├── questions.html
│ └── questions.js
├── lib
│ ├── collections.js
│ └── methods.js
└── server
└── publish.js
...
我试过这个,但它让我回到了原来只能访问登录用户的问题,而不是数组中的其他用户标识。是我在lib文件夹> collections.js中定义这个集合助手的问题吗? publish.js位于服务器文件夹中,collections.js似乎不知道已发布的“allUsers”?我如何在collections.js中订阅已发布的allUsers? – Samudra
确保'Meteor.subscribe'调用位于'client'目录下。或者,你可以用'Meteor.publish(null,function(){')替换'Meteor.publish(“allUsers”,function(){',这将自动订阅所有用户而不需要调用' Meteor.subscribe'。 –
解决了它!(我不知道我什么时候发表评论 - 这是我的愚蠢:)) 我不知道我清楚地知道我以前做错了什么 - 你能帮忙吗?我的理解不正确?现在,我创建了一个新的出版物'allUsers',然后在客户端上订阅它,这会将更大版本的Meteor.users公开给我的整个应用程序吗?然后,当我打电话给Meteor.users.find在我的askByUsers助手中,它可以访问这整个扩展集?我确信这会在后来当我有真正的用户时产生问题 - 这是做这件事的最好方法吗? – Samudra