Meteorjs: удалить реакцию на определенный оператор публикации

Есть ли способ опубликовать после того, как запрос на подписку сделан, а затем прекратить вносить изменения, внесенные в коллекцию, до тех пор, пока клиент снова не подпишется?

У меня есть этот сценарий:

Сервер:

Meteor.publish("posts", function () {
    return Messages.find(); //Do not push changes to this collection!
});

Клиент:

Meteor.subscribe("posts");

person em.rexhepi    schedule 23.12.2014    source источник
comment
Когда вы говорите autopublish, вы, кажется, имеете в виду не пакет, а реактивность и синхронизацию данных. Я прав?   -  person Kyll    schedule 23.12.2014
comment
@Kyll, да, извините за плохое объяснение. Да, я хочу, чтобы данные НЕ БЫЛИ РЕАКТИВНЫМИ.   -  person em.rexhepi    schedule 23.12.2014
comment
Я готов ответить, просто короткий вопрос: поможет ли метод? Отправка массива всех сообщений клиенту?   -  person Kyll    schedule 23.12.2014
comment
@Kyll Хорошо, если мне придется проделать трюк, я это сделаю, но я не хочу вручную отображать шаблон пламени. Я хочу, чтобы этот оператор публикации не обновлял клиент реактивно и не прекращал функцию публикации (я думаю, что если я завершу функцию, я добавлю время ожидания для пользователя, пока она не будет повторно инициирована, если я не ошибаюсь ).   -  person em.rexhepi    schedule 23.12.2014
comment
Шаблон можно было рендерить все-таки массивом данных, а не курсором? Если вам нужна дополнительная информация об этом, нам нужно будет ее увидеть.   -  person Kyll    schedule 23.12.2014
comment
Я действительно не понимаю, можете ли вы быть более конкретным и объяснить мне, что вы предлагаете. Извините за высокомерие.   -  person em.rexhepi    schedule 23.12.2014


Ответы (1)


Если вам просто нужно выполнить однократную отправку данных клиенту, может сработать метод:

//Server
Meteor.methods({
  getSomePosts : function(limit)
  {
    check(limit, Number);
    return Posts.find({}, {limit : limit}).fetch();
  }
});

//Client
Meteor.call('getAllPosts', function(err, result) {
  //Do stuff with the result
});

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

Подробнее об ограничениях в документе!

person Kyll    schedule 23.12.2014
comment
Спасибо за пример метода. И спасибо за предложение не передавать весь пост, я сделал этот пример, чтобы не усложнять. Есть ли способ ограничить Meteor.publish(), чтобы он просто возвращал курсор, когда Meteor.subscribe() вызывает публикацию, просто чтобы удалить реактивность? (Если нет, я пойду методом) - person em.rexhepi; 23.12.2014
comment
Конечно, позвольте мне отредактировать мой ответ, вы можете использовать ограничение с помощью курсора. - person Kyll; 23.12.2014
comment
Что ж, спасибо за запрос монго, я знаю, что могу добавить в запрос то, что хочу. Любой ответ, как я могу удалить реактивность в Meteor.publish(), кроме способа Meteor.methods(). - person em.rexhepi; 23.12.2014
comment
Вам придется настроить объявление коллекции и публикацию довольно уродливыми способами. Проверьте Meteor.Collection в документе. - person Kyll; 23.12.2014