私は、投稿のための2つの出版物を持つ流星のアプリを持っています。 1つはすべての投稿用、1つは特集記事用です。ポスト1とポスト4の2つの特集記事があります。すべてのページに特集記事を表示していますが、投稿ごとに投稿された投稿を名前で並べ替えて表示しています。ページ間を移動すると、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つのサブスクリプションのデータがディスプレイに混在していることです。
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" 内側紹介され、 "ポスト" が、shouldn」を示している:1ページ
それはそれを正しく示して私はページ3に行くとき、私は "ポスト1"と "ポスト4"を参照してくださいが、彼らはそこにすべきではありません。
パブリケーションとサブスクリプションがどのように機能し、なぜこれが起こっているのかを理解しています。パブリケーションがデータセットをマージするためです。それらを別々に保つための回避策があるかどうか疑問に思っていますか?
コレクションヘルパーでこの仕事をしていますか? – Addy
私はコレクションヘルパーを使用していないが、変換関数を登録するだけであると考えると、変換関数が動作するところ、つまり 'observe'があればどこでも動作することを期待しています。 docsから。 "変換は、observeChangesのコールバックまたは発行関数から返されたカーソルには適用されません。" –
他のコレクションからデータを「結合」する必要がある場合は、コールバックで必要なカスタムロジックを実行できます。さらに、変換関数を渡して/ findOneを検索し、コレクションレベル変換をオーバーライドすることもできます。 –