Есть ли способ узнать, когда подписка на метеоры «действительна»?

Если я изменю переменную Sessionи вызову повторную подписку через autosubscribe, существует ли какой-либо механизм обратного вызова для ждать, пока «последние» данные не будут удалены с сервера? [1]

Если вы посмотрите на эту суть, вы увидите некоторый код, который регистрирует содержимое коллекции с течением времени по мере изменения подписки. Соответствующий раздел вывода:

at Subscribed; comments are: first post on #1 - second post on #1 
at Flushed; comments are: first post on #1 - second post on #1 
at Subscription complete; comments are: first post on #1 - second post on #1 - first post on #2 - second post on #2

Итак, даже после (а) вызова .subscribe, (б) вызова Meteor.flush(в) нахождения внутри onReady обратный вызов для .subscribe; в коллекции все еще есть устаревшие данные, и только в 3-м случае там есть «правильные» данные.

Я понимаю, что реактивные шаблоны и .observeв конечном итоге получат правильные данные, и все «установится» в правильное состояние. Но можем ли мы каким-то образом сказать, что мы еще не там?

Например, большинство приложений-примеров метеора (и моих собственных приложений) склонны к рывкам (аналогично FOUC) при добавлении и удалении данных из подписной коллекции. Если бы мы могли сказать, что подписка «загружается», мы могли бы что-то с этим сделать.

[1] Очевидно, что данные на сервере постоянно меняются, но, как вы увидите из сути, я не могу (без тайм-аута) найти точку, где это хотя бы правильно.Таким образом, мое использование «действительного» в вопросе.

Очень простой и распространенный вариант использования.

Возьмите приложение madewith; когда вы впервые загружаете его, кажется, что приложений не зарегистрировано, до тех пор, пока данные не передаются по проводу, и приложения внезапно не появляются.

Причина этого в том, что Meteor.subscribeбыл вызван, но данные еще не поступили по сети. Но у шаблона нет простого способа сообщить, что данные ожидают обработки и что он должен показывать «загружающийся» шаблон. В madewithони на самом деле что-то делают, когда данные загружены, но это обратный вызов, и, таким образом, он выходит за рамки обычного метеорного способа выполнения действий (т. е. реактивного кодирования).

Было бы намного лучше (ИМО) иметь возможность написать что-то вроде:

 {{unless apps_loaded}}{{> loading}}{{/unless}}

и

 Template.madewith.apps_loaded = function() { return !Apps.isComplete(); }

5
задан Dan Dascalescu 18 February 2014 в 04:00
поделиться