【发布时间】:2019-12-18 19:55:31
【问题描述】:
我有一个模板,其中包含一个选择,它使用户能够过滤集合中显示在表格上的一些对象。
我将选择的结果存储在 ReactiveVar 中。然后我在查询中使用这个 ReactiveVar 来让 Helper 将我的对象返回到模板。
模板代码
<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 中获取它..which afaik 只是一个 JSON 对象)
这种将 reactiveVar 与 Helper 结合使用的模式是标准吗?
【问题讨论】:
标签: javascript mongodb caching meteor