Meteor 1.0.4 更新:现在模板级订阅可用,并且是使用 iron:router 或独立订阅的首选模式,
Template.instance().subscriptionsReady()
当所有调用的订阅this.subscribe
都准备好时,有一个补充函数返回 true。
在模板的 HTML 中,您可以使用内置的 helper 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>
这比为整个页面使用通用加载模板要好,因为加载部分已本地化到实际具有新数据的页面部分。
流星前 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}}
更新:使用iron-router,您可以直接选择指定loading
在订阅加载时显示的模板。