[英]Meteor Helpers caching Cursors
我有一个模板,其中包含一个选择,它使用户能够过滤显示在表上的集合中的某些对象。
我将选择的结果存储在 ReactiveVar 中。 然后我在查询帮助器中使用这个 ReactiveVar 将我的对象返回到模板。
模板代码
<select id="colorSelect">
<option val="getRed">getRed</option>
<option val="getBlack">getBlack</option>
</select>
<table>
{{#each Objects}}
/* create table */
{{/each}}
</table>
这是JS
//onCreated initializing Template ReactiveVar for Object's Color
Template.Object.onCreated(function() {
this.color = new ReactiveVar("");
});
//event for changing 'color' based on select option
Template.Object.events({
'change #colorSelect'(e, template) {
const target = e.target;
const color = $(target).val();
template.color.set(color);
}
});
//Helper method to return Objects
Template.objects.helpers({
Objects: function() {
const color = Template.instance().color.get();
return Objects.find({foo:bar, color:color}).fetch();
}
});
这一切似乎都很好,我的表格会根据选择进行被动调整。 我的问题是关于效率以及框架是否知道缓存我已经获得的游标。 那么它会在每次用户更改选择时执行 DB.find() 吗?
是否更有效 1. 做一个初始查找 2. 然后过滤这个主要的原始数据(来自 fetch 调用的数组) 3. 最后返回到 UI 然而,这样做似乎完全失去了反应性的任何优势,并且会需要用JS重新排列表格。
或者...... Meteor 是否只知道缓存我已经得到的游标(它甚至会产生性能差异 - 看看它是从 MiniMongo 中获取的......其中 afaik 只是一个 JSON 对象)
这种将reactiveVar 与Helper 结合使用的模式是标准吗?
我会说你的代码非常可靠,这实际上是它如何完成的标准,所以不用担心那部分。
至于效率和缓存,需要注意的是,客户端已经在minimongo
保存了服务器数据、订阅的本地副本,因此只要您:
你可以走了。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.