Meteor 0.8.0+,如何为长时间运行的代码提供“忙碌的微调器”?

时间:2014-07-06 18:14:45

标签: javascript user-interface meteor user-experience meteor-blaze

我有一个长时间运行的模板助手。它依赖于三个独立的集合,并执行大量循环来为日常报告调整一些数据。用户可以长时间运行,但我需要向他们提供反馈,即客户正忙于计算将要呈现给UI的内容。对我来说问题是使用waitOn钩子只能让我分道扬and,并且渲染的回调不起作用,除非我向模板添加一个新行(几乎从不)。事实上,我想知道Meteor团队是否意识到这一点。这似乎是一个很好的功能。我有一个具有相同行数和列数的表,但单元格中的值会发生变化。当计算这些单元格的JS运行时,如何向用户显示一些反馈?

3 个答案:

答案 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)

好的,所以钥匙是双重的。我需要故意拖延“加载”#34;我提供的反馈。我认为这是在更新元素实际完成渲染后调用的。我使用了下划线延迟函数,如下所示:

_.delay removeUpdating, 500

removeUpdating只删除每个表格单元格上的一个类,并更新&#39;。

然后在这个辅助方法的开头,我将这些类添加到所有单元格中。

延迟加上漂亮的CSS3背景动画为用户提供了一个很好的提示,即当他们导航时字段会更新!

我不想手动添加延迟,也不想使用jQuery添加和删除类,所以我们非常感谢任何更好的建议!