0

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

4

3 回答 3

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);
};
于 2014-07-07T07:52:39.020 回答
1

我有一个类似的问题。当表格更新时,我必须显示一个指示。我观察了查询(检查 Collection.observeChanges)并在行上运行了一个 jQuery 驱动的 flash。

在您的情况下,您似乎是在自己进行计算并将其作为变量提供给模板。在原始模板中放置一个微调器,并在计算结束时用 jQuery 隐藏它。

于 2014-07-06T18:40:34.140 回答
0

好的,所以关键是双重的。我需要故意延迟我提供的“加载”反馈。我认为这是在更新元素实际完成渲染之后调用的。我像这样使用下划线延迟功能:

_.delay removeUpdating, 500

removeUpdating 只是删除每个表格单元格“更新”上的一个类。

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

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

我不希望手动添加延迟,也不希望使用 jQuery 添加和删除类,所以任何更好的建议都值得赞赏!

于 2014-07-06T22:20:37.250 回答