我已经阅读了这个Meteor template helpers fire multiple times并尝试重现这一点而不涉及任何收藏。
所以我得到了这样的帮助:
Template.myTemplate.helpers({
test: function(){
console.log("Fired");
return {
name : "Foo"
};
}
});
模板看起来像这样:
<template name="myTemplate">
{{test.name}}{{test.name}}
</template>
在控制台我预计只会看到“被解雇”一次,但实际上两次调用助手?因此,如果我的帮助者正在访问集合并从那里获取数据,那么每次使用{{helper.key}}它都会执行查询?这是怎么回事?
答案 0 :(得分:1)
是的,你是对的,每次在模板中使用时,模板系统都会调用帮助器。
我想你要问的是,这是否对收藏有效,因为它们被一次又一次地调用。
这就是为什么meteor的.find()
返回一个缓存的游标。如果您尝试使用.find()
查找内容,可以看到此内容,您将获得一个对象,但实际上并不是您的数据。游标仅在需要时获取数据,因此它看起来效率不高。
追加.fetch()
实际上提取数据并且不使用此缓存,这就是效率较低的原因,并且通常建议不要将其用作帮助程序的return
值。