【问题标题】:Meteor #each block issues流星#each块问题
【发布时间】:2015-12-08 07:46:57
【问题描述】:

我想使用 each 块遍历 Mongo 查询以获取用户的集合。

我有以下 html 模板,它应该从用户集合中的配置文件对象中加载不同的数据。

为了澄清,用户集合有一个服务、状态和配置文件对象

    {{#each profile}}
        <div class="profileUser oneDiv">
            <div class="profileUserLeft">
                <div class="profileUserImage">
                    <div class="spin"> {{> spinner}} </div>
                    <img src="{{profile.picturelrg}}" class="profileUserImg">
                </div>
                <div class="profileUserGraph">
                    <label for="myChart"><b>Meetup Graph</b>
                    <br>
                    <span class="profileMonth"> {{profile.month}} </span>
                    <br>
                        <canvas id="myChart"></canvas>
                    </label>
                </div>
            </div>
            <div class="profileUserRight">
                <div class="profileUserName">
                    <ul>
                        <li><h1>{{profile.name}}</h1></li>
                        <li>
                            <div class="circle" style="background-color: {{online.color}}"></div>
                        </li>
                    </ul>
                </div>
        </div>
    </div>
   {{/each}}

这是我设置查询的助手

profile: function() {
            return Meteor.users.find({
                _id: id
            });
        }

当前页面没有加载任何数据。

当我静态查询属性时,它可以工作。这样做是这样的。

profimg: function() {
            return Meteor.users.find({
                _id: id
            }).fetch()[0].profile.picturelrg;
        }

如何更高效地使用每个块,而不是使用 fetch() 方法静态搜索每个不同的属性?

【问题讨论】:

    标签: html mongodb meteor


    【解决方案1】:

    Blazeeach 将数组作为参数循环,而find 方法返回MongoDB 的Cursor。你需要做的是fetch光标返回数组

    profile: function() {
        return Meteor.users.find({
            _id: id
        }).fetch();
    }
    

    但是,您的逻辑不正确。您正在查找与输入 id 匹配的配置文件,因此该函数应该是

    profile: function() {
        return Meteor.users.findOne({
            _id: id
        });
    }
    

    然后您可以在没有each 循环的情况下访问该属性

    【讨论】: