24

find在流星模板辅助函数中,如果我返回 a vs a的结果,性能、重新渲染次数或其他任何方面是否有差异fetch

例如,查找方法:

Template.players.topScorers = function () {
  return Users.find({score: {$gt: 100}}, {sort: {score: -1}});
};

或者添加一个提取:

Template.players.topScorers = function () {
  return Users.find({score: {$gt: 100}}, {sort: {score: -1}}).fetch();
};

find-only 方法是当前文档中的内容,但我看到很多其他人在使用fetch.

4

2 回答 2

48

就在这里。

通过使用 fetch,您可以在现场注册对整个查询结果集的依赖。通过使用find和稍后迭代使用{{#each}}依赖项分别在每个文档上注册。所以当一个文档发生变化时,只会重新渲染相关的代码。使用 时fetch,更改结果集中的任何文档都会重新呈现您使用的整个范围fetch

对于小的结果集,它没有任何区别。对于频繁更改的较大集合,它可能会减慢计算速度并导致不希望的视觉伪影。

我写了一篇文章可以帮助您理解它(虽然它没有直接回答您的问题)

于 2013-05-17T06:48:25.173 回答
0

这就是我们在 Oodles Technologies 中所遵循的。

要定义帮助程序,只需转到您的模板 js 文件,例如,如果您的模板名称为 allInventory,那么只需转到 allInventory.js 文件并按如下方式编写帮助程序:-

Template.allInventory.helpers({

})

在这个帮助器中创建一个函数,在其中放置用于从数据库或会话或其他服务获取数据的逻辑,而不是在 html 中使用它,例如:-

    Template.allInventory.helpers({
        productDetails: function() {
              return Session.get('dbData');
        }
    })

On html side you just need to use the function name as follows:-

{{#each productInfo in productDetails}}

        <div class="imgb"><img src="{{productInfo.image_url}}"></div>
           {{productInfo.item_name}}
           {{productInfo.seller_sku}}
            {{productInfo.quantity}}
            {{productInfo.price}}

<a type="button" class="full-view text-success"><i id="fullView" data="{{productInfo._id}}" class="fa fa-eye"></i></a>

          {{/each}} 

正如您在上面的 productDetails 中看到的那样,您的帮助程序类中的函数名称可以通过该名称直接访问,您可以通过该名称直接访问要在 Html 上呈现的数据,并且您可以通过 html 模板中的每个循环遍历它。

于 2016-10-13T09:59:18.707 回答