我在Meteor中尝试reywood:publish-composite软件包,并没有取得基本的成功。模板不显示从MongoDB Collection中提取的字段。
/server/publish.js
Meteor.publishComposite("PDetail", function(pShortname) {
console.log("Browser asked to subscribe to PDetail with: " + pShortname);
return {
find: function() {
return Proj.find( {shortname: pShortname} );
}
}
});
/collections/collections.js
Proj = new Mongo.Collection('proj');
/client/app.js
Router.route('proj', {
path: '/proj/:shortname',
template: 'proj',
waitOn: function() {
return Meteor.subscribe('PDetail', this.params.shortname);
}
});
/client/proj/proj.html
<template name="proj">
<h1>Name: {{pname}}</h1>
</template>
我得到的只是姓名:没有pname值。
我确认MongoDB数据库确实有与shortname查询匹配的Collection数据,而pname确实有一个值。在服务器上,我确实看到一个成功的“浏览器要求订阅”console.log消息,其中传递了短名称(上面显示的console.log)。
我认为我正确地遵循了发布复合文档,但在添加Iron Router时,事情变得有些模糊。任何想法都将不胜感激!
答案 0 :(得分:0)
您的路线功能需要返回数据上下文;
Router.route('proj', {
path: '/proj/:shortname',
template: 'proj',
waitOn: function() {
return Meteor.subscribe('PDetail', this.params.shortname);
}
data: Proj.findOne({shortname: this.params.shortname});
});