我用Meteor开始了我的第一个应用程序,一切都很顺利,直到我发现一个集合不再显示在模板中。
这是我的代码:
App.js
Tasks = new Mongo.Collection("tasks");
if (Meteor.isServer) {
Meteor.publish("tasks", function () {
return Tasks.find();
});
}
if (Meteor.isClient) {
Meteor.subscribe("tasks");
Template.body.helpers({
tasks: function () {
return Tasks.find({}, {sort: {createdAt: -1}});
}
});
}
App.html
<template name="home">
<h3>Open Tasks</h3>
<ul>
{{#each tasks}}
{{> displayTasks}}
{{/each}}
</ul>
</template>
<template name="displayTasks">
<li>{{text}}</li>
</template>
Routes.js
Router.route("/", function () {
this.render("Home");
});
我已经使用http://meteortips.com/second-meteor-tutorial/publish-subscribe/和MeteorJS template not showing data, not appearing进行了双重检查,并且似乎我已正确完成所有操作。我也尝试更改名称并尝试在不同的模板上显示任务,但无济于事。 MongoDB确实有数据,我可以手动插入填充了text
字段的条目(使用Mongo控制台)。
我还可以做什么来排除故障?回溯我的步骤没有帮助,我宁愿避免从头开始新的应用程序。
注意:我正在使用Iron Router。
答案 0 :(得分:0)
默认情况下,子模板无权访问其父级帮助程序。在上面的代码中,已为tasks
模板定义了body
帮助程序,但home
模板中需要它。试试这个:
Template.home.helpers({
tasks: function () {
return Tasks.find({}, {sort: {createdAt: -1}});
}
});
请注意,可以明确地将帮助从父级传递给子级,如我对this question的回答所示,但这种情况并不常见。