如何将计算属性添加到Meteor集合中

时间:2015-04-30 13:29:48

标签: collections meteor aggregation-framework reactive-programming computation

我想将一些动态计算的属性添加到服务器端集合,然后将此组合集合发送到客户端。

假设我有一个简单的页面,人们可以发布问题,然后附上答案。

有两个集合:QuestionsAnswers。 每个答案都有一个属性questionId

在客户端,我想显示所有问题的列表,每个问题都有答案计数。由于带宽方面的考虑,我不想通过线路发送Answers集合。理想情况下,我希望计数表现出反应性。

  • 问题1(12答案)
  • 问题2(4答案)

到目前为止,我的解决方案看起来并不像“流星”这样。对我来说。

第一个解决方案只是为每个问题添加answerCount属性,然后在添加或删除答案时修改该属性。但是,我不喜欢重复的信息,如果计算中有一些可能会发生变化的动态参数,它也不起作用。

第二个解决方案是使用方法调用进行服务器端计算:

Meteor.methods({
  numOfAnswers: function(questionId) {
    return Answers.find({questionId: questionId}).count();
  }
});

从客户端我会使用模板助手,如:

numOfAnswers: function(){
  return ReactiveMethod.call("numOfAnswers", this._id);
}

尽管这样可以正常工作,但它会引起很多方法调用,而且根本不会反应。

可能另一个解决方案可能是使用MongoDB聚合(可能通过meteorhacks:聚合),但是再次这不是被动的,可能有点矫枉过正。

我在不同的地方遇到过这个问题几次。我想念一些明显的东西吗?

0 个答案:

没有答案