流星渲染和mongodb集合

时间:2015-05-04 06:54:41

标签: jquery mongodb meteor

Meteor的新手。我正在尝试显示来自mongoDB集合的数据,并希望迭代它以执行一些计算。

如下所述:

Employee = new Mongo.Collection("data");

Template.welcome.rendered = function() {
   var employee = Employee.find({}); 
   employee.forEach(function(emp){ console.log(emp.id); });
}

但是我得到一个空数组。如何处理这种情况?

(我可以把它放在' helper和subscriber部分',但我需要使用embedly执行一些jQuery操作。但是这个jQuery不能在这个帮助函数中工作。)

3 个答案:

答案 0 :(得分:0)

首先你应该知道,当你申报Mongo时,最好使用相同的名字" employee"在构造函数中。

另外你应该注意到,使用最新版本的MeteorJS你应该使用 Template.name.onRendered()而不是渲染,这对于向后兼容性有效,但它会不推荐。

还有一件事。在ID之前不要忘记下划线: _id

试试这段代码,看看它是否有效:

Employee = new Mongo.Collection("employee");

Template.welcome.onRendered( function() {
   var employee = Employee.find({}); 
   employee.forEach(function(emp){ console.log(emp._id); });
}

答案 1 :(得分:0)

流星文档说

<块引用>

在客户端,从页面加载到发布的数据从服务器到达之间会有一段时间,在此期间您的客户端集合将为空。

来源:https://docs.meteor.com/api/collections.html#Mongo-Collection-find

答案 2 :(得分:0)

尝试使用删除自动发布 meteor remove autopublish

在服务器端添加发布:

Meteor.publish('tasks',function(){
  return Tasks.find({});
});

并在客户端添加订阅:

Template.todos.onRendered(() => {

    this.state = new ReactiveDict();
    Meteor.subscribe('tasks');
    const tasksArr = Tasks.find({}).fetch();
    
});

如果您使用 Iron Route,请使用

Router.route('/todos', {
    waitOn: function (){
        return Meteor.subscribe('tasks');
    },
    action: function (){
        this.render('todos_calendar');
    }
});

本教程可能会有所帮助:https://www.meteor.com/tutorials/blaze/publish-and-subscribe