Publish/subscribe 未在 Blaze 模板中加载
Publish/subscribe not loading in Blaze template
在我实现 publish/subscribe 之前,我的代码工作正常。我关注了 the basic tutorial and checked the source code 并且我没有做任何不同的事情。一切都构建并运行,但 MongoDB 中的任何内容都不会显示在 Blaze 模板中。
imports/api/features.js
if (Meteor.isServer) {
Meteor.publish('features', function featuresPublication() {
return Features.find({});
});
Meteor.publish('comments', function commentsPublication() {
return Features.find({}, {fields: {comments: 0}});
})
};
client/main.js
Template.body.onCreated(function bodyOnCreated() {
Meteor.subscribe('features');
});
client/main.html
<body>
<h1 id="title">Feature Requests</h1>
{{#if currentUser}}
<button class="ui green button create" id="create">Add a New Feature Request</button>
{{> requestForm}}
{{#each features}}
{{> feature}}
{{/each}}
{{else}}
{{> loginButtons}}
{{/if}}
</body>
编辑#1
在我 运行 meteor remove autopublish
之前,我的代码看起来像这样并且有效:
Template.body.helpers({
features() {
return Features.find({}, {sort: {createdAt: -1}});
},
comments() {
return Features.find({}, {fields: {comments: 0}});
},
});
编辑 #2
感谢所有提供答案的人。我从根本上误解了 publish/subscribe 的工作原理。我没有意识到订阅后我还需要打电话给return Features.find({})
。这是我的工作代码:
import { Features } from '../imports/api/features.js';
import '../imports/api/features.js'
Template.body.onCreated(function bodyOnCreated() {
Meteor.subscribe('features');
});
Template.body.helpers({
features: function() {
return Features.find({});
}
});
试试这个:
Template.body.onCreated(function() {
const self = this;
self.autorun(() => {
self.subscribe('features');
});
});
另请参阅 https://guide.meteor.com/data-loading.html#organizing-subscriptions。
忽略第一个答案。缺少 autorun
是首先引起我注意的,但由于您没有将任何参数传递给 subscribe
,因此不需要。
我的下一个问题是:在 client/main.html
中,对 features
的引用来自哪里? Template.body
上有 features
助手吗?如果没有,您需要添加它:
Template.body.helpers({
features: function() {
return Features.find({});
}
});
另外,参见
我看到您正在使用导入目录。您是否记得将您的发布文件导入 server/main.js 文件?
server/main:
import 'imports/path/to/publications.js'
在我实现 publish/subscribe 之前,我的代码工作正常。我关注了 the basic tutorial and checked the source code 并且我没有做任何不同的事情。一切都构建并运行,但 MongoDB 中的任何内容都不会显示在 Blaze 模板中。
imports/api/features.js
if (Meteor.isServer) {
Meteor.publish('features', function featuresPublication() {
return Features.find({});
});
Meteor.publish('comments', function commentsPublication() {
return Features.find({}, {fields: {comments: 0}});
})
};
client/main.js
Template.body.onCreated(function bodyOnCreated() {
Meteor.subscribe('features');
});
client/main.html
<body>
<h1 id="title">Feature Requests</h1>
{{#if currentUser}}
<button class="ui green button create" id="create">Add a New Feature Request</button>
{{> requestForm}}
{{#each features}}
{{> feature}}
{{/each}}
{{else}}
{{> loginButtons}}
{{/if}}
</body>
编辑#1
在我 运行 meteor remove autopublish
之前,我的代码看起来像这样并且有效:
Template.body.helpers({
features() {
return Features.find({}, {sort: {createdAt: -1}});
},
comments() {
return Features.find({}, {fields: {comments: 0}});
},
});
编辑 #2
感谢所有提供答案的人。我从根本上误解了 publish/subscribe 的工作原理。我没有意识到订阅后我还需要打电话给return Features.find({})
。这是我的工作代码:
import { Features } from '../imports/api/features.js';
import '../imports/api/features.js'
Template.body.onCreated(function bodyOnCreated() {
Meteor.subscribe('features');
});
Template.body.helpers({
features: function() {
return Features.find({});
}
});
试试这个:
Template.body.onCreated(function() {
const self = this;
self.autorun(() => {
self.subscribe('features');
});
});
另请参阅 https://guide.meteor.com/data-loading.html#organizing-subscriptions。
忽略第一个答案。缺少 autorun
是首先引起我注意的,但由于您没有将任何参数传递给 subscribe
,因此不需要。
我的下一个问题是:在 client/main.html
中,对 features
的引用来自哪里? Template.body
上有 features
助手吗?如果没有,您需要添加它:
Template.body.helpers({
features: function() {
return Features.find({});
}
});
另外,参见
我看到您正在使用导入目录。您是否记得将您的发布文件导入 server/main.js 文件?
server/main:
import 'imports/path/to/publications.js'