Javascript Meteor JS-避免助手过度工作的设计模式

Javascript Meteor JS-避免助手过度工作的设计模式,javascript,meteor,Javascript,Meteor,我有以下助手,我觉得有点工作过度。这基本上是通过我拥有的一堆SVG循环,如果它们在DB中有相应的数据,那么SVG的填充颜色应该改变(数据的视觉表示) 所以现在我把这个功能附加到了helper上,但它感觉非常错误和臃肿。有没有更好的方法在不使用助手的情况下达到同样的效果?我知道我的评论中有一些这样的内容,但当我仔细考虑之后,我决定给出一个更全面的答案 如果您不关心有反应性数据,那么使用 如果您需要反应式数据,我建议您使用以下方法来帮助解决订阅未准备就绪的问题: FlowRouter.subsRea

我有以下助手,我觉得有点工作过度。这基本上是通过我拥有的一堆SVG循环,如果它们在DB中有相应的数据,那么SVG的填充颜色应该改变(数据的视觉表示)


所以现在我把这个功能附加到了helper上,但它感觉非常错误和臃肿。有没有更好的方法在不使用助手的情况下达到同样的效果?

我知道我的评论中有一些这样的内容,但当我仔细考虑之后,我决定给出一个更全面的答案

如果您不关心有反应性数据,那么使用

如果您需要反应式数据,我建议您使用以下方法来帮助解决订阅未准备就绪的问题:

FlowRouter.subsReady("treatments");
您还可以将ReactiveVars与自动运行一起使用。一个很好的开始。我知道这是一个很大的阅读,但它肯定会有帮助

因此,在渲染过程中,您可以执行以下操作:

this.treatment = new ReactiveVar({});

this.autorun(function () {
    if(FlowRouter.subsReady("treatments")) {
        // other computations or functions
        this.treatment.set(Treatments.find...);
    }
});
这将使您的
治疗
变量具有反应性,允许您访问此模板实例中的任何位置,并简化您的助手:

treatments: function () {
    return Template.instance().get(); // Reactive computation (see note)
}
注意:助手是被动计算。这意味着,如果您将一个被动变量放入助手中,它将成为某种自动运行。这是一个很好的资源


此外,如果您使用的是最新版本的Meteor,
rendered
已被弃用,取而代之的是
onRendered

您可能想看看FlowRouter,以解决您的订阅尚未准备好的问题。如果不需要数据是被动的,您也可以尝试Meteor服务器方法?如果它是在另一个Meteor模板中完成的,那么大部分逻辑应该转到那里的模板助手,而不是试图修改已经从其他地方呈现的内容。您能显示您的模板(html)代码吗?我怀疑您可以在牙齿级别实现一个helper,这将节省大量的db查找,同时避免对整个阵列进行反应式重新计算。
this.treatment = new ReactiveVar({});

this.autorun(function () {
    if(FlowRouter.subsReady("treatments")) {
        // other computations or functions
        this.treatment.set(Treatments.find...);
    }
});
treatments: function () {
    return Template.instance().get(); // Reactive computation (see note)
}