我有一个长时间运行的模板助手。它依赖于三个独立的集合,并执行大量循环来为日常报告调整一些数据。用户可以长时间运行,但我需要向他们提供反馈,即客户正忙于计算将要呈现给UI的内容。对我来说问题是使用waitOn钩子只能让我分道扬and,并且渲染的回调不起作用,除非我向模板添加一个新行(几乎从不)。事实上,我想知道Meteor团队是否意识到这一点。这似乎是一个很好的功能。我有一个具有相同行数和列数的表,但单元格中的值会发生变化。当计算这些单元格的JS运行时,如何向用户显示一些反馈?
答案 0 :(得分:3)
Meteor的方式是使用反应变量:
<强> HTML 强>
<template name="busy">
{{#if processing}}
spinner
{{else}}
Done, showing results: ...
{{/if}}
</template>
<强> JS 强>
var data = new ReactiveDict();
Template.busy.rendered = function() {
data.set('processing', true);
};
Template.busy.processing = function() {
return data.get('processing');
};
var processing = function() {
...
// Looooong calculations
...
// Or even async
...
data.set('processing', false);
};
答案 1 :(得分:1)
我遇到过类似的问题。我必须在更新表时显示一个指示。我观察了查询(检查Collection.observeChanges)并在行上运行了一个jQuery驱动的flash。
在您的情况下,您似乎正在进行自己的计算并将其作为变量提供给模板。将一个微调器放在原始模板中,在计算结束时用jQuery隐藏它。
答案 2 :(得分:0)
_.delay removeUpdating, 500
removeUpdating只删除每个表格单元格上的一个类,并更新&#39;。
然后在这个辅助方法的开头,我将这些类添加到所有单元格中。
延迟加上漂亮的CSS3背景动画为用户提供了一个很好的提示,即当他们导航时字段会更新!
我不想手动添加延迟,也不想使用jQuery添加和删除类,所以我们非常感谢任何更好的建议!