在集合文档(Meteor)中将数组元素作为单个值进行迭代
我正在尝试创建一个在线聊天列表。每当一个人搬进一个房间,他的昵称就会被推入房间的数组中,当他离开时,昵称又会被拉出。到目前为止,这一切都很好。但是,在实际列表中显示数组让我感到困惑 我需要将这些名称分开,以便将它们放入锚标记中,因为这些名称是url参数 文件室文档如下所示:在集合文档(Meteor)中将数组元素作为单个值进行迭代,meteor,meteor-blaze,Meteor,Meteor Blaze,我正在尝试创建一个在线聊天列表。每当一个人搬进一个房间,他的昵称就会被推入房间的数组中,当他离开时,昵称又会被拉出。到目前为止,这一切都很好。但是,在实际列表中显示数组让我感到困惑 我需要将这些名称分开,以便将它们放入锚标记中,因为这些名称是url参数 文件室文档如下所示: { "_id": "crsEES5d22uYJiqDZ", "name": "Room", "roomdesc": " ", "inRoom": [name1, name2, name3], "creat
{
"_id": "crsEES5d22uYJiqDZ",
"name": "Room",
"roomdesc": " ",
"inRoom": [name1, name2, name3],
"createdAt": "2019-06-08T12:39:51.382Z",
"owner": "Kuroki"
}
我有一个助手来获取数组。我使用getParam获取房间的名称,以便找到合适的房间
Template.onlineliste.helpers({
roomData() {
var name = FlowRouter.getParam('name');
return Channels.find({name:name}, {sort: {createdAt: 1}})
},
});
然后我尝试迭代,这当然会将数组显示为一个整体,而不是将每个名称都显示为单个值
<template name="onlineliste">
{{#each roomData}}
{{inRoom}}
{{/each}}
</template>
{{{#每个房间数据}
{{inRoom}}
{{/每个}}
有人能告诉我如何迭代数组的单个值,使它们像
- 名字1
- 名称2
- 名字3
本身就是一个数组,因此每个都需要第二个:
{{#roomData中的每个房间}
{{{#房间里的每个名字。inRoom}
- {{name}}
{{/每个}}
{{/每个}}
如果只显示一个房间,您甚至可以更改代码以返回当前的单人房间:
Template.onlineliste.helpers({
roomData(){
var name=FlowRouter.getParam('name');
返回Channels.findOne({name:name}})
},
});
它只按名称返回一个文件室文档,不需要迭代。然后,您可以通过以下方式访问它:
{{#使用roomData}
{{{#这个}里的每个名字}
- {{name}}
{{/每个}}
{{/与}}
有人能告诉我如何迭代数组的单个值,使它们显示为
房间中的字段本身就是一个数组,因此每个都需要第二个:
{{#roomData中的每个房间}
{{{#房间里的每个名字。inRoom}
- {{name}}
{{/每个}}
{{/每个}}
如果只显示一个房间,您甚至可以更改代码以返回当前的单人房间:
Template.onlineliste.helpers({
roomData(){
var name=FlowRouter.getParam('name');
返回Channels.findOne({name:name}})
},
});
它只按名称返回一个文件室文档,不需要迭代。然后,您可以通过以下方式访问它:
{{#使用roomData}
{{{#这个}里的每个名字}
- {{name}}
{{/每个}}
{{/与}}
我认为这对我的问题不起作用的原因是{{name}}没有引用数组的值。我用find和findOne进行了尝试。您是否console.log(Channels.findOne({name:name}}))
验证它是否返回了任何内容?是的,name
值是正确的-这是一个相当于for(let element in iterable){…}
的blaze,其中值name
被分配给迭代的当前元素的上下文。Uncaught ReferenceError:Channels没有定义在:1:1
它说,当我尝试这个console.log时。但是这很奇怪,因为我已经可以通过执行{{roomData.inRoom}}来返回整个数组了。但是,如果我使用findOne选项console.log以{{{each}}响应,那么当前只接受数组、游标或假值
,这就是为什么您需要在findOne
上使用with
,就像我发布的上一个代码片段一样。请试着用这个,我用过了。这是同一个错误:error:{{{#each}}当前只接受数组、游标或假值。
I甚至复制了代码段。我甚至在空白页上尝试,看看是否有其他代码在干扰,但结果相同。如果你非常确定这是解决问题的方法,我怀疑问题一定出在其他地方。我会努力找到它。谢谢您的时间。我想这对我的问题不起作用的原因是{{name}}没有引用数组的值。我用find和findOne进行了尝试。您是否console.log(Channels.findOne({name:name}}))
验证它是否返回了任何内容?是的,name
值是正确的-这是一个相当于for(let element in iterable){…}
的blaze,其中值name
被分配给迭代的当前元素的上下文。Uncaught ReferenceError:Channels没有定义在:1:1
它说,当我尝试这个console.log时。但是这很奇怪,因为我已经可以通过执行{{roomData.inRoom}}来返回整个数组了。但是,如果我使用findOne选项console.log以{{{each}}响应,那么当前只接受数组、游标或假值
,这就是为什么您需要在findOne
上使用with
,就像我发布的上一个代码片段一样。请试着用这个,我用过了。这是同一个错误:error:{{{#each}}当前只接受数组、游标或假值。
I甚至复制了代码段。我甚至在空白页上尝试,看看是否有其他代码在干扰,但结果相同。如果你非常确定这是解决问题的方法,我怀疑问题一定出在其他地方。我会努力找到它。谢谢你抽出时间。