2016-01-11 3 views
1

Если мой UI зависит отЯвляется ли реактивность в Метеор затронутой полями, выбранными в запросе?

MyCollection.find({_id: "..."}) 

Я знаю, что это вызывает реактивности всякий раз, когда любое поле в том, что изменения документа. Но если я просто выбрать одно поле из этого документа:

MyCollection.find({_id: "..."}, {fields: { MyAttr: 1 }}) 

ли реакционная способность получить срабатывает для каких-либо изменений в документ с тем, что _id, или это только получить срабатывает для изменений в MyAttr области этого документа?

+0

'find' возвращает курсор и курсор реагирует –

+0

@ThaiTran, я знаю, что он реактивный, это скорее вопрос того, на что он реагирует. Будет ли он реагировать на любые изменения в этом документе или только изменения в этой области? – nephets

+1

вопрос не имеет смысла, потому что это непонятно. Тайский Тран сказал, что весь возвращенный курсор является реактивным, так что непонятно? – webdeb

ответ

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"); 
}); 

Теперь, когда я вручную обновить MyOtherAttr на «jpBLBgCyEi3XpicxF ", called GetMyAttr записывается на консоль. Но если я меняю заявление найти в:

return MyCollection.findOne({_id: "jpBLBgCyEi3XpicxF"}, {fields: {MyAttr: 1}}).MyAttr; 

Затем обновление MyOtherAttr на документе «jpBLBgCyEi3XpicxF» не вызывает called GetMyAttr для печати.

Заключение: Курсоры реагируют только на изменения данных, возвращаемых этими курсорами.

В ретроспективе это кажется очевидным, что он должен работать таким образом. Я думаю, что это хорошая причина чаще использовать часть запроса {fields: {}}, чтобы уменьшить ненужную реактивность.

+0

Извините, я неверно истолковал ваш оригинальный вопрос! Вы абсолютно правы. –

Смежные вопросы