如果我的用户界面取决于
MyCollection.find({_id: "..."})
我知道只要该文档中的任何字段发生变化,它就会触发反应。但是,如果我只从该文档中选择一个字段:
MyCollection.find({_id: "..."}, {fields: { MyAttr: 1 }})
对于具有该_id的文档的任何更改是否会触发反应性,还是只会在对该文档的MyAttr
字段进行更改时触发反应?
答案 0 :(得分:1)
我做了一个简单的测试来确定这个:
的test.html:
<template name="test">
{{ #if Template.subscriptionsReady }}
{{ GetMyAttr }}
{{ /if }}
</template>
test.js:
Template.test.helpers({
GetMyAttr: function() {
console.log('called GetMyAttr');
return MyCollection.findOne({_id: "jpBLBgCyEi3XpicxF"}).MyAttr;
}
});
Template.test.onCreated(function() {
this.subscribe("my_collection");
});
现在,当我在&#34; jpBLBgCyEi3XpicxF&#34;上手动更新MyOtherAttr
时文档called GetMyAttr
已记录到控制台。但是,如果我将find语句更改为:
return MyCollection.findOne({_id: "jpBLBgCyEi3XpicxF"}, {fields: {MyAttr: 1}}).MyAttr;
然后更新&#34; jpBLBgCyEi3XpicxF&#34;上的MyOtherAttr
文献
不会导致called GetMyAttr
被打印。
结论:游标仅对这些游标中返回的数据的变化做出反应。
回想起来,这显然应该是那样的。我认为这是更经常使用查询的{fields: {}}
部分的一个很好的理由,以减少不必要的反应。