【问题标题】:Meteor : getting data from collectionMeteor:从集合中获取数据
【发布时间】:2015-04-15 12:37:37
【问题描述】:

(这是我在流星中的第一个应用) 我有问题,我无法从集合中获取数据。 我要做日历。 我有日期名称的集合,并有这个月天数的数组,而 mondey 是 0 等。 在集合中,我有名称和索引,如果索引等于数组中的天数,我想显示天的名称 我不知道我做得好不好。 请注意我所有的应用程序代码,它在文件夹中排序,但我只是在需要帮助的地方复制了代码

    <template name="calendar">

            {{#each months}}
            <span>{{name}}</li>
            {{/each}}
        </ul>    
        {{days}}
        <div class="calendar">
            <ul>            
                {{#each daysofweek}}
                <li>
                    {{index}}
                </li>
                {{/each}}
            </ul>
            {{#each generateCalendar}}
            <ul>
                <li>
                    <ul>
                        {{#each this}}
                        <li>
                            {{day}}: {{dayOfWeek}}
                        </li>
                        {{/each}}
                    </ul>
                </li>
            </ul>
            {{/each}}
        </div>    
        <!--    <button class="remove">click</button>-->
    </template>


db = new Array;
db['dayoftheweek'] = new Mongo.Collection('dayoftheweek');
db['months'] = new Mongo.Collection('months');
Template.calendar.helpers({
'daysofweek': function () {        
        return db['dayoftheweek'].find();        
    },
    'generateCalendar': function () {
        var tab = [];
        var daysInMonth = Session.get('currentMonthDays');
        var fDay = Session.get('currentMonthFDay');
        for (var i = 1; i <= daysInMonth; i++) {
            tab[i] = {day: i, dayOfWeek: fDay};
            if (fDay === 6) {
                fDay = 0;
            } else {
                fDay++;
            }
        }
        var weeks = [];
        var i = 0;
        while (tab.length > 0) {
            if (i === 0) {
                weeks[i] = tab.splice(0, (8 - Session.get('currentMonthFDay')));
                i++;
            } else {
                weeks[i] = tab.splice(0, 7);
                i++;
            }
        }        
        return weeks;
    }

});
Meteor.methods({
    'removeFromDb': function(selected, dbname){        
        db[dbname].remove(selected);
    }
});

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

    我不确定我是否正确理解了您的问题,但我认为您错过了 collection.find() 方法返回游标。因此,如果您想获取数据,您需要调用cursor.fetch() 方法,该方法将返回一个包含数据的数组。
    查看 find 方法的文档:http://docs.meteor.com/#/full/find
    Fetch 方法的文档:http://docs.meteor.com/#/full/fetch

    要打印数组中所有对象的名称,您需要一个循环:
    var days = db['dayoftheweek'].find().fetch(); for(var i=0; i<days.length; i++) { console.log(days[i].name); }

    【讨论】:

    • 当我使用 console.log(db['dayoftheweek'].find().fetch());它返回我的对象​​数组我如何从这些对象中获取数据?
    • 每个对象都是您收藏中的一条记录。如果您的“dayoftheweek”集合中有一个名为“name”的列,您可以致电object.name
    • 我已经用一个例子编辑了我的答案,因为代码在 cmets 中的格式不正确。
    • 我解决了它,但你能检查一下我的整个代码并说点什么吗? 'daysofweek': function (dayOfWeek) { return db['dayoftheweek'].find().fetch()[dayOfWeek].name; }
    • {{day}}: {{daysofweek dayOfWeek}}
  • daysofweek 方法可以很好地工作,但您可以进行一些改进。您可以使用该方法返回包含所有星期名称的数组,而不仅仅是一个名称。您可以使用此数组来显示您需要的日期的名称。这会更好,因为您不会发出从daysofweek 集合中获取所有数据的请求,只是为了得到一个现在的名称。改进代码的另一种可能方法是将选择器添加到find() 函数并仅获取所需的一周中的一天的数据。将findOne() 函数与选择器一起使用也很好。
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签