1

我已多次阅读此 Meteor 模板助手触发并尝试在不涉及任何集合的情况下重现此内容。

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

Template.myTemplate.helpers({
    test: function(){
        console.log("Fired");
        return {
            name : "Foo"
        };
    }
});

模板看起来像这样:

<template name="myTemplate">
    {{test.name}}{{test.name}}
</template>

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

4

1 回答 1

1

是的,您是对的,每次您在模板中使用它时,模板系统都会调用一个助手。

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

这就是为什么流星.find()返回一个游标,它是一种缓存。如果你尝试用 找到一些东西,你会看到这一点.find(),你会得到一个对象,但实际上不是你的数据。游标仅在需要时获取数据,因此它并不像看起来那样低效。

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

于 2014-01-11T11:31:23.470 回答