我完成了Meteor'简单todo'教程,并认为我已经掌握了它的工作原理的基本要点。但是我现在正在开始自己的项目,并立即遇到问题。
无论我尝试什么,我都无法从Meteor和我的模板中获取任何数据,甚至无法获得node.runAction(SKAction.sequence([animationWait, group([animationScale, animationAlpha])]))
。它总是console.log
。我甚至通过终端中的undefined
仔细检查了集合,我传入的数据是正确的。我甚至尝试过硬编码文档ID。
我希望有人可以指出我的代码明显错误。
这是当前的迭代不起作用,但我似乎已经尝试了我可以在网上找到的每个变体:
JS:
meteor mongo
HTML:
Pros = new Mongo.Collection("pros");
if (Meteor.isClient) {
Meteor.subscribe("pros");
Router.configure({
layoutTemplate: 'main'
});
Router.route('/brief/:_id', function () {
this.render('Brief', {
data: function(){
var proid = this.params._id;
return Pros.findOne({ _id: proid });
}
});
});
}
if(Meteor.isServer){
Meteor.publish("pros", function () {
return Pros.find();
});
}
(我也在<template name="main">
<h1>Title here</h1>
{{> yield}}
</template>
<template name="brief">
<h2>{{ name }}</h2>
</template>
)
DB数据(通过终端中的find命令)
pros
我现在也尝试过以下没有产生任何不同结果的内容(它只是处于加载状态):
db.pros.find({});
{ "_id" : ObjectId("55915761145c29018ac97edb"), "name" : "Jimbob" }
有什么想法吗?
答案 0 :(得分:2)
您在Meteor中使用的ObjectIDs不是默认值(Meteor在插入文档时会生成17个字符串而不是Mongo ObjectID)
尝试类似:
data: function () {
Pros.findOne({ _id: new Mongo.ObjectID(this.params._id)});
}
答案 1 :(得分:1)
您不应在发布中使用findOne
。它只返回一个对象,而不是光标。此外,将data
字段添加回客户端路由。试试这个:
if (Meteor.isClient) {
Router.configure({
layoutTemplate: 'main'
});
Router.route('/brief/:_id', {
loadingTemplate: 'loading',
waitOn: function () {
return Meteor.subscribe('pros', this.params._id);
},
data: function(){
var proid = this.params._id;
return Pros.findOne({ _id: proid });
},
action: function () {
this.render('brief');
}
});
}
if(Meteor.isServer){
Meteor.publish('pros', function(proId) {
return Pros.find({_id: proId});
});
}