2015-05-07 44 views
1

所以我试图返回一个mongoDB数据库值到我的Meteor.js项目中的模板。我使用的代码如下。不能得到meteor.js返回mongo集合

Template.ResourceManager.helpers({ 
BoosterOneFuel : function(){ 
     return resources.findOne({system : "booster1"}).fuel; 
} 

}); 

但是,这总是返回null。当我尝试提醒它时,警报还表示此值为空。蒙戈可以找到它,当我运行在控制台中这条线在运行流星蒙戈

db.Resources.findOne({system : "booster1"}).fuel; 

但流星不能。 (这是一个本地主机,所以流星蒙戈应该影响流星的数据库)

我不认为它与流星装载问题之前蒙戈呢,因为以下仍然不能正常工作:

if(resource.find({system : "booster1"})) 
    alert(resources.findOne({system : "booster1"}).fuel); 

有人知道这里发生了什么? 在此先感谢。

+1

您确定拼写?我看到“资源”,“资源”,“资源”...... – sebnukem

+0

您是否正在订阅客户端上的资源集合? –

回答

4

假设集合实际上被称为resources - 即你有东西,看起来像:

resources = new Mongo.Collection('Resources'); 

然后,它听起来像你只需要发布的文件给客户端:

服务器/出版商.js文件

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

客户端/订阅。 JS

Meteor.subscribe('resources'); 

当然的订阅可以在你的模板或路由器发生,而不是全球性的,但已经超出了问题的范围。

另请注意,您应该为您的帮手添加一个guard。例如:

Template.ResourceManager.helpers({ 
    BoosterOneFuel : function() { 
    var b1 = resources.findOne({system : "booster1"}); 
    return b1 && b1.fuel; 
    } 
}); 
+0

嘿大卫....我正在关注版本1.5(集合部分)的教程。我有同样的问题。不知道什么是错的。在流星控制台查询显示该文件。有没有一种方法来调试,因为浏览器不显示错误在这里...? –

+0

没有更多的上下文我不知道该怎么建议。你确定你的帮手(或任何引用这个集合的函数)是否被调用? –

+0

我喜欢某事。我猜想我并不完全理解“进口”。教程说在客户机/服务器main.js中添加'import'../ imports/api/tasks.js';'。我将其改为从'../ imports/api/tasks.js''导入{Tasks}并解决它。 –