Метеор, отношение один ко многим и добавить поле только в коллекцию на стороне клиента в публикации?
Может кто-нибудь увидеть, что может быть не так в этом коде, в основном я хочу проверить, была ли публикация опубликована текущим вошедшим пользователем И добавить временное поле в коллекцию на стороне клиента: isCurrentUserShared.
Это работает 1-й раз при загрузке новой страницы и заполнении из существующих общих ресурсов или при добавлении ИЛИ удаления записи в коллекцию общих ресурсов ТОЛЬКО в самый первый раз после загрузки страницы.
1) isSharedByMe только 1 раз изменяет состояние, затем обратные вызовы по-прежнему вызываются в соответствии с console.log, но isSharedByMe не обновляется в коллекции сообщений после первого добавления или удаления записи. Работает с первого раза.
2) Почему обратные вызовы вызываются дважды подряд, то есть добавление 1 записи в Sharescollection запускает 2 вызова, как показано в console.log.
Meteor.publish('posts', function() {
var self = this;
var mySharedHandle;
function checkSharedBy(IN_postId) {
mySharedHandle = Shares.find( { postId: IN_postId, userId: self.userId }).observeChanges({
added: function(id) {
console.log(" ...INSIDE checkSharedBy(); ADDED: IN_postId = " + IN_postId );
self.added('posts', IN_postId, { isSharedByMe: true });
},
removed: function(id) {
console.log(" ...INSIDE checkSharedBy(); REMOVED: IN_postId = " + IN_postId );
self.changed('posts', IN_postId, { isSharedByMe: false });
}
});
}
var handle = Posts.find().observeChanges({
added: function(id, fields) {
checkSharedBy(id);
self.added('posts', id, fields);
},
// This callback never gets run, even when checkSharedBy() changes field isSharedByMe.
changed: function(id, fields) {
self.changed('posts', id, fields);
},
removed: function(id) {
self.removed('posts', id);
}
});
// Stop observing cursor when client unsubscribes
self.onStop(function() {
handle.stop();
mySharedHandle.stop();
});
self.ready();
});