每次呼叫时访问Meteor模板帮助程序

每次呼叫时访问Meteor模板帮助程序,meteor,handlebars.js,meteor-helper,Meteor,Handlebars.js,Meteor Helper,我读过这篇文章,并试图在不涉及任何收藏的情况下复制这篇文章 所以我得到了这样的助手: Template.myTemplate.helpers({ test: function(){ console.log("Fired"); return { name : "Foo" }; } }); <template name="myTemplate"> {{test.name}}{{test.na

我读过这篇文章,并试图在不涉及任何收藏的情况下复制这篇文章

所以我得到了这样的助手:

Template.myTemplate.helpers({
    test: function(){
        console.log("Fired");
        return {
            name : "Foo"
        };
    }
});
<template name="myTemplate">
    {{test.name}}{{test.name}}
</template>
模板如下所示:

Template.myTemplate.helpers({
    test: function(){
        console.log("Fired");
        return {
            name : "Foo"
        };
    }
});
<template name="myTemplate">
    {{test.name}}{{test.name}}
</template>

{{test.name}{{test.name}

在控制台中,我只希望看到“Fired”一次,但helper实际上被调用了两次?所以,如果我的助手正在访问集合并从中获取数据,那么每次我使用{{helper.key}时,它都会执行一个查询?这就是它的工作原理吗

是的,您是对的,每次在模板中使用帮助程序时,模板系统都会调用帮助程序

我想你要问的是,这对收集是否有效,因为它们被一次又一次地调用

这就是meteor的
.find()
返回游标的原因,游标是一种缓存。如果您尝试使用
.find()
查找某个对象,就会看到这一点,您将得到一个对象,但实际上并不是您的数据。游标只获取所需的数据,因此它不像看上去那样效率低下


追加
.fetch()
实际上会获取数据,而不使用此缓存,这就是为什么它效率较低,并且经常建议不要用作帮助程序的
返回值。

谢谢您的回答。但是如果我有一个关于某个项目的编辑页面,并且我想用值填充输入字段,那么我将调用{{item.keyOne},{{item.keytowo},并且我需要实际的数据,所以每次都会调用fetch()?那该怎么解决呢?我想你会用缓存调用它一次。因为当您使用
项时。
您将使用
findOne()
。无论哪种方式,内存使用/差异都是无关紧要的。操作开销非常低,因为所有内容都已存储在内存中。我正在尝试通过my helper中的api从另一个站点获取一些远程内容。对于这种情况?