我想将一些动态计算的属性添加到服务器端集合,然后将此组合集合发送到客户端。
假设我有一个简单的页面,人们可以发布问题,然后附上答案。
有两个集合:Questions
和Answers
。
每个答案都有一个属性questionId
。
在客户端,我想显示所有问题的列表,每个问题都有答案计数。由于带宽方面的考虑,我不想通过线路发送Answers
集合。理想情况下,我希望计数表现出反应性。
到目前为止,我的解决方案看起来并不像“流星”这样。对我来说。
第一个解决方案只是为每个问题添加answerCount
属性,然后在添加或删除答案时修改该属性。但是,我不喜欢重复的信息,如果计算中有一些可能会发生变化的动态参数,它也不起作用。
第二个解决方案是使用方法调用进行服务器端计算:
Meteor.methods({
numOfAnswers: function(questionId) {
return Answers.find({questionId: questionId}).count();
}
});
从客户端我会使用模板助手,如:
numOfAnswers: function(){
return ReactiveMethod.call("numOfAnswers", this._id);
}
尽管这样可以正常工作,但它会引起很多方法调用,而且根本不会反应。
可能另一个解决方案可能是使用MongoDB聚合(可能通过meteorhacks:聚合),但是再次这不是被动的,可能有点矫枉过正。
我在不同的地方遇到过这个问题几次。我想念一些明显的东西吗?