1

我在 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();

或整个集合(没有“this”),它不起作用,我在 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>
4

3 回答 3

2

如果TodosCol是一个集合,那么它的.find()方法返回一个 Cursor - http://docs.meteor.com/#/basic/Mongo-Collection-find。游标可用于使用{{each}}.

正如文档所解释的,如果您想要find()调用结果,则需要调用- 在http://docs.meteor.com/#/full/mongo_cursor.fetch()了解更多信息

于 2015-02-22T01:55:53.077 回答
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>
于 2014-11-27T11:03:20.210 回答
0

问题是javascript对象没有toArray()方法。如果没有更多细节,我无法提供太多帮助。即,您究竟希望数组包含什么?对象包含键值对,也称为属性。当您第一次收到对象时,您应该将对象记录到控制台,并查看您希望对象的哪些部分组成您的数组。

例如,如果您想要对象上的键/属性数组,您可以尝试sublen.keys()返回对象上每个属性(键)的字符串名称数组。

也许您想要一个已经存储在对象中的数组作为某个键的值。通过记录对象,您可以找到此键/属性并通过点符号访问它:sublen.<property-name>

去这里看看js Object上面有哪些方法:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object

于 2014-11-27T09:34:07.273 回答