Ответ 1
Обновление Meteor 1.0.4: теперь доступны подписки на уровне шаблона, и предпочтительный шаблон для использования железа: роутер или автономные подписки,
Существует дополнительная функция
Template.instance().subscriptionsReady()
, которая возвращает true, когда все подписки, вызываемые с помощьюthis.subscribe
, готовы.Внутри HTML-шаблона вы можете использовать встроенный вспомогательный
Template.subscriptionsReady
, который является простым шаблоном для показа индикаторов загрузки в ваших шаблонах, когда они зависят от данных, загружаемых из подписки.
Пример:
Template.notifications.onCreated(function () {
// Use this.subscribe inside onCreated callback
this.subscribe("notifications");
});
<template name="notifications">
{{#if Template.subscriptionsReady}}
<!-- This is displayed when all data is ready. -->
{{#each notifications}}
{{> notification}}
{{/each}}
{{else}}
Loading...
{{/if}}
</template>
Это лучше, чем наличие общего шаблона загрузки для всей страницы, потому что раздел загрузки локализован на части страницы, на самом деле имеющей новые данные.
Pre-Meteor 1.0.4:
Идея состоит в том, чтобы передать функцию onReady в Meteor.subscribe
:
Meteor.subscribe('tasks', function onReady() {
Session.set('tasksLoaded', true);
});
Затем заставьте шаблон зависеть от переменной сеанса tasksLoaded
. В клиенте JavaScript:
Template.task_list.helpers({
tasksLoaded: function () {
return Session.get('tasksLoaded');
}
});
В вашем шаблоне:
<template name="task_list">
{{#if tasksLoaded}}
{{#each tasks}}
{{> task}}
{{/each}}
{{else}}
<img src="http://viewvc.svn.mozilla.org/vc/addons/trunk/bandwagon/skin/images/spinner.gif?revision=18591&view=co&pathrev=18591">
{{/if}}
UPDATE: при iron-router у вас есть прямая опция для указания шаблона loading
, который будет отображаться во время загрузки подписки.