나는 게시물을위한 2 개의 출판물을 가지고있는 유성 앱을 가지고있다. 모든 게시물 하나와 추천 게시물을위한 하나. 두 개의 추천 게시물 - "Post 1"및 "Post 4"가 있습니다. 모든 페이지에 추천 게시물을 표시하고, 추천 게시물을 포함한 모든 게시물을 이름순으로 정렬합니다. 페이지 간을 이동하면 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 템플릿은 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
}
});
});
및 데이터를 표시 : 여기
코드입니다<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
컬렉션 헬퍼를 사용하지 않고 변환 함수를 등록한다고 가정 할 때 변환 함수가 작동하는 모든 곳, 즉 '관찰'을 사용하면 작동 할 것이라고 기대할 수 있습니다. docs에서 "변환은 observeChanges의 콜백 또는 게시 함수에서 반환 된 커서에 적용되지 않습니다." –
또한 ... 콜렉션에서 필요한 모든 사용자 정의 논리를 수행 할 수 있다는 것을 명심하십시오. 다른 콜렉션의 데이터에 "조인"해야하는 경우. 또한 변환 함수를 전달하여/findOne을 찾아 컬렉션 수준 변환을 무시할 수 있습니다. –