我有一个相当新手的问题,我希望有人可以帮助我。
我有以下代码,其中订阅/发布不起作用:
if (Meteor.isServer) {
Meteor.publish('items', function () {
return Items.find({});
});
}
if (Meteor.isClient) {
Meteor.subscribe("items");
}
在我的模板中:
<template name="items">
<div class="ui segment">
<div class="ui relaxed list">
{{#each item in items}}
<div class="item">
<img class="ui avatar image" src="http://placehold.it/20x20">
<div class="content">
<a class="header">{{item.text}}
</div>
<button class="delete">×</button>
</div>
{{/each}}
</div>
</div>
</template>
但没有任何东西可以输出。但是,当我添加:
Template.items.helpers({
items: function () {
return Items.find({});
}
});
我确实看到了清单。为什么会这样?另外,我很清楚为什么有人会想要使用订阅/发布以及模板助手。
答案 0 :(得分:1)
您必须使用与publish()中使用的名称相同的subscribe()。在你的情况下(注意'项目'):
/服务器:
Meteor.publish('items', function () {
return Items.find({});
});
/客户端:
if (Meteor.isClient) {
Meteor.subscribe('items');
}
发布/订阅链接告诉meteor将'Items'集合中的所有文档发送到客户端上的minimongo。现在,模板帮助程序的目的是告诉meteor,当文档在Items中发生更改时,您希望反应性地更新模板。
关于这个主题的一个很好的参考:https://www.discovermeteor.com/blog/understanding-meteor-publications-and-subscriptions/
答案 1 :(得分:1)
我建议你阅读Data flow from the database to the UI: Three layers of Meteor
您正在创建标记为items
的出版物。然后您订阅了标有deals
的出版物。这不起作用,因为标签必须匹配订阅才能工作。
如果添加template helper
然后在用户界面中显示数据,则您的应用中必须包含autopublish
个包。它将是自动发布,而不是您的发布/订阅,即向客户端发送客户端放入迷你mongo Items
集合中的数据。
因此pub / sub将数据从服务器获取到客户端,但不显示它。这就是为什么你需要template helper
来从客户端的mini-mongo集合中获取模板所需格式的原因。