Публикация Meteor перезаписывает другую публикацию

У меня есть два метода публикации, как показано ниже, но когда я подписываюсь на один из методов публикации на странице поиска клиента, он перезаписывается другим, предназначенным для индексной страницы.

Сервер

Meteor.publish("task.index", function() {
  TaskCollection.find()
}

Meteor.publish("task.index.search", function(state) {
  TaskCollection.find({ state: state })
}

Клиент - страница поиска

Meteor.subscribe("task.index.search", state)
// this will always be overwritten with "task.index" published collection

Клиент - основная страница

Meteor.subscribe("task.index")

Кто-нибудь знает, как этого избежать?


person Hazeem    schedule 15.10.2017    source источник


Ответы (2)


Добро пожаловать в СО!

Существует высокая вероятность того, что «переопределение», которое вы видите, является обычным поведением Meteor для механизма публикации/подписки.

Ваша "task.index" публикация отправляет клиенту все ваши TaskCollection документы.

Поэтому любая другая публикация на том же TaskCollection будет отправлять документы, которые Клиент уже знает.

Затем в вашем клиенте фильтрация некоторых документов из TaskCollection будет независима от вашей подписки и публикации. Просто выполните TaskCollection.find({ state: state }) клиентскую часть, и вы получите необходимые документы.

Когда вы публикуете только подмножество документов Коллекции, бывает так, что вы публикуете точно уже отфильтрованные документы, которые вы хотите отобразить на своем Клиенте, поэтому на вашем Клиенте вы просто отображаете все документы Коллекции. вы знаете о. Но вы должны понимать, что это 2 разных шага:

  1. Подписка на отправку некоторых документов Клиенту. Можно установить несколько Подписок, заполняющих одну и ту же Коллекцию на Клиенте.
  2. Фильтрация по Клиенту на основе документов, присланных Подпиской(ами) (возможно, несколькими).

См. также: Подписка на публикацию не работает

person ghybs    schedule 15.10.2017

Если ваш клиентский индекс и страницы поиска представляют собой разные шаблоны, вы можете подписаться на документы на соответствующем уровне шаблона.

Клиент - страница поиска:

Template.search.created = function () {
    const template = this;
    template.subscribe('task.index.search', state);
}
Template.search.rendered = function () {
    console.log("Client search : " + TaskCollection.find().fetch().length); 
}

Клиент - индексная страница:

Template.index.created = function () {
    const template = this;
    template.subscribe('task.index');
}
Template.index.rendered = function () {
    console.log(""Index : " + TaskCollection.find().fetch().length); 
}

Но всегда желательно фильтровать документы и на клиенте.

person Sudheer Jami    schedule 16.10.2017