【发布时间】:2013-05-21 05:05:05
【问题描述】:
我的头撞墙已经有一段时间了,我想我在这里遗漏了一些简单的东西。
我在 Meteor 服务器上运行它:
// --- Collections ---
Projects = new Meteor.Collection('projects');
Team = new Meteor.Collection('team');
// --- Only publish user data for users on my team ---
Meteor.publish('team', function() {
var team = Meteor.users.findOne({_id: this.userId}).profile._team;
console.log(Meteor.users.find({'profile._team': team}, {fields: {_id: 1, profile: 1}}).fetch());
return Meteor.users.find({'profile._team': team}, {fields: {_id: 1, profile: 1}});
});
这通过对profile._team 属性中与当前登录用户具有相同ID 的所有用户文档运行查询来查找属于同一“团队”的所有用户。您将在发布函数中看到console.log(...);(在 return 语句之前的行),它正确地记录了我希望它在我的终端中的文档。
现在我在我的客户端上运行它:
// --- Data ---
Meteor.subscribe('team');
Team = new Meteor.Collection('team');
Template.team.team = function() {
console.log(Team.findOne());
return Team.find();
};
但是,console.log(Team.findOne()) 始终记录未定义,Team.find() 始终返回一个空数组。我做错了什么导致我的文档无法到达客户手中?
更新:这是模板代码。
<body>
{{> team}}
</body>
<template name="team">
<p>TEAM TEMPLATE WORKS</p>
{{#each team}}
<p>TEAM EACH WORKS</p>
<div class="teamMember">
{{profile.firstName}} {{profile.lastName}}
</div>
{{/each}}
</template>
“TEAM EACH WORKS”永远不会在 {{#each}} 标记内呈现,但“TEAM TEMPLATE WORKS”放在 {{#each}} 标记之前时会按预期呈现。
【问题讨论】:
-
奇怪。请发布您的模板代码。
-
添加了模板代码。
-
有助于理解客户端一般需要和服务端使用相同的集合名,但是订阅名可以完全不同,需要和发布名匹配(不是 服务器上的集合名称)。详情见how Meteor collection, subscriptions and publications work。
标签: meteor