我有一个流星应用程序,其中有 2 个帖子出版物。一个用于所有帖子,一个用于特色帖子。有 2 个精选帖子 - “帖子 1”和“帖子 4”。我在所有页面上显示精选帖子,同时按名称对所有帖子(包括精选帖子)进行分页。当我在页面之间旅行时,来自 2 个出版物的数据会混淆并显示不正确的结果。
这是代码:
Meteor.publish('posts', function(page) {
const skip = parseInt(page && page !== '' ? page : 0) * 3
return Posts.find({}, {
limit: 3,
skip,
sort: {
name: 1
}
});
});
Meteor.publish('featured', function() {
return Posts.find({
featured: true
}, {
sort: {
name: 1
}
});
});
在客户端上,我同时订阅并在 2 个循环中显示数据
Template.hello.onCreated(function helloOnCreated() {
const instance = this;
instance.autorun(function() {
instance.subscribe('posts', FlowRouter.getParam('page'))
instance.subscribe('featured')
});
});
Template.hello.helpers({
posts() {
return Posts.find({}, {
limit: 3,
sort: {
name: 1
}
})
},
featured_posts() {
return Posts.find({
featured: true
}, {
sort: {
name: 1
}
});
}
});
HTML模板如下:
<template name="hello">
<h2>Featured</h2>
{{#each featured_posts}}
{{> post}}
{{/each}}
<h2>Posts</h2>
{{#each posts}}
{{> post}}
{{/each}}
</template>
问题是来自 2 个订阅的数据在显示中混淆了。
在第 1 页上,它正确显示:
Page 1
Featured
post 1
post 4
All Posts
post 1
post 2
post 3
但是当我转到第 2 页时
Page 2
Featured
post 1
post 4
All Posts -- Should be
post 1 post 4
post 4 post 5
post 5 post 6
它在“帖子”中显示“帖子 1”,这是特色但不应该出现在第 2 页上。当我转到第 3 页时,我看到“帖子 1”和“帖子 4”,但它们不应该在那里。
我了解出版物和订阅是如何工作的,以及为什么会发生这种情况——因为出版物合并了数据集。我想知道是否有办法让它们分开?