【发布时间】:2019-07-28 03:51:09
【问题描述】:
我正在尝试使用 Meteor.js、Blaze 和 Mongodb 构建一个友谊系统。我现在想在他的个人资料页面上显示用户的朋友。
我有一个集合“users”,其中包含字段“friends”,这是一个可以推入或拉出其他用途名称的数组。
用户文档的简化示例:
"name" : "bob"
"friends" : ["value of name-field of user-document1", "value of name-field of user-document2", "etc."]
我尝试将这个朋友数组放在配置文件的隐藏输入中,并从那里使用它在 profile-template.helpers 上创建迭代:
<input id="friends" type="hidden" value="{{user.friends}}">
friends() {
var friends = document.getElementById("friends").value;
var friendsArray = friends.split(",");
return Users.find({name:{$in: friendsArray},})
},
但这不是它的工作原理。如何使用/获取此字段,其中包含此 $in 操作的好友数组,以获取与 bob 成为好友的其他用户?我也试过 this.friends 但这似乎只适用于迭代。
我可以使用
{{#each friend in user.friends}}
{{friend}}
{{/each}}
至少要得到朋友的名字,但我想在显示朋友部分也包括那些朋友的小头像,所以那不行。
编辑:用户变量在 Template.user.helpers 中定义为:
user: ()=> {
var user = FlowRouter.getParam('user');
return Users.findOne({name: user});
},
我尝试在朋友功能中使用this.data.char.friends,就像这样
friends() {
return Users.find({
name: { $in: (this.data.user.friends) }
});
},
但它给了我一个 console.log 错误:
Exception in template helper: ReferenceError: user is not defined
【问题讨论】:
-
在您的 Blaze 模板中,您正在使用
<input id="friends" type="hidden" value="{{user.friends}}">-user变量是如何定义的?在您的模板助手friends中,您最好执行this.data.user.friends之类的操作(=从模板数据上下文中获取值),而不是从呈现的输入字段中获取该值。 -
如果我在同一个 template.user.helpers 中有两个变量(friends() 和 user:),我还能使用“this.data.user.friends”吗?我试着把它放进去,但它给了我一个错误^
-
@TKur :好的,基本上你想根据来自 mongoDB 的给定用户获取朋友数组中列出的每个人的详细信息?用户的朋友数组中列出的人是否在同一个集合中拥有自己的记录/数据/文档,并且具有唯一 ID,例如姓名/某物??
-
是的,这就是我想要的。朋友数组中列出的每个人本身在用户集合中都有自己的文档。当然,他们也有自己的 ID。但是保存在friendarray中的是该用户文档的名称字段。
-
@TKur :我已经给我的查询尝试过,并确保您从friendsDetails Array 中提取数据,以将朋友详细信息作为单个对象!
标签: mongodb meteor meteor-blaze