我在Meteor中从MongoDB获取了一份文件:
Template.SubTasks.helpers ({
subelement: function (){
var sublen = TodosCol.find(this);
// var sublen2 = ????
return sublen2;
}
});
效果很好,sublen作为对象返回。但是当我试图将它转换为数组时(例如:
) var sublen2 = sublen.toArray();
或
var sublen = TodosCol.find(this).toArray();
或整个系列(没有'这个'),它没有工作,我得到一个" undefined不是一个功能" Chrome控制台中的错误。
我也试过
var sublen2 = sublen.propertyName;
因为它是一个对象,没有运气。
我做错了什么?
由于
编辑:
我试图在mongo文档中迭代存储在数组中的值。我想输出它们,例如作为单独的div输出。这是一个简单的任务列表。任务迭代很好,但我试图输出分配给特定任务的子任务。子任务存储在与其父任务相同的文档中。作为一个字符串数组。
模板:
<template name='SubTasks'>
<div class='sub-output {{_id}}'>
{{#each subelement}}
<div class='sub-task {{_id}}'>
{{subtask}}
</div>
{{/each}}
</div>
</template>
答案 0 :(得分:2)
如果TodosCol
是一个集合,那么它的.find()
方法会返回一个Cursor - http://docs.meteor.com/#/basic/Mongo-Collection-find。光标可用于使用{{each}}
高效且反应性地迭代结果。
正如文档所述,如果您想要find()
来电的结果,则需要致电.fetch()
- 在http://docs.meteor.com/#/full/mongo_cursor了解详情
答案 1 :(得分:0)
问题是javascript对象没有toArray()
方法。没有更多细节,我无法提供很多帮助。也就是说,您希望阵列包含什么?对象包含键值对,也称为属性。您应该在第一次接收对象时将对象记录到控制台,并查看要组成阵列的对象的哪些部分。
例如,如果您想在对象上使用键/属性数组,则可以尝试sublen.keys()
,它返回对象上每个属性(键)的字符串名称数组。
也许你想要一个已经存储在对象中的数组作为某个键的值。通过记录对象,您可以找到此密钥/属性并通过点表示法访问它:sublen.<property-name>
到这里查看js Object对它有哪些方法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object
答案 2 :(得分:0)
我假设您有一个MongoDB集合,并且在该集合中有一个名为subtasks
的密钥,它有一个数组。
Template.tasks.helpers({
tasks:function(){
return Tasks.find({}).fetch();
}
});
然后在您的HTML模板中。
<template name="tasks">
{{#each tasks}}
<div id ="{{_id}}">
<p>{{title}}</p>
<ul>
{{#each subtasks}}
<li>
<p>{{this}}</p>
</li>
{{/each}}
</ul>
</div>
{{/each}}
</template>