在流星模板辅助函数中,如果我返回find
与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();
};
仅限查找方法是目前docs中的方法,但我见过很多其他人使用fetch
。
答案 0 :(得分:48)
是的。
通过使用fetch,您可以在现场注册整个查询结果集。通过使用find
以及稍后使用{{#each}}
进行迭代,将在每个文档上单独注册依赖项。因此,当一个文档发生更改时,只会重新呈现相关代码。使用fetch
时,更改结果集中的任何文档都会重新呈现您使用fetch
的整个范围。
对于小的结果集,它没有任何区别。对于频繁更改的较大集合,它可能会减慢计算速度并导致不必要的视觉伪影。
我写了一篇post,可以帮助你理解它(虽然它没有直接回答你的问题)
答案 1 :(得分: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模板中的每个循环遍历该函数。