[英]Make Meteor Reactive to Specific Subitem of Meteor.user()
我需要使用一些存儲在用戶的Meteor.user()
對象中的子屬性,例如Meteor.user().profile.preferences.preference_one
, Meteor.user().profile.preferences.preference_two
等。 這些子屬性在反應式自動運行塊中使用,因為每次更改它們時都必須進行重新計算。
我發現,當我從反應式塊中引用這些子屬性的值時,將對Meteor.user()
對象的任何更改Meteor.user()
包括不會以任何方式影響我的數據的更改Meteor.user()
觸發自動運行是顯式引用。 例如,如果更新了Meteor.user().profile.name
,那么包含Meteor.user().profile.preferences.preference_one
或Meteor.user().profile.preferences.preference_two
任何自動運行Meteor.user().profile.preferences.preference_one
被觸發,因為他們都有共同的父母。
我已經看到了一個類似的問題,涉及限制Meteor的反應性范圍,但是它涉及的是自定義集合,而不是Meteor.users
集合。 我看不到那里的解決方案如何適用,因為它們在訂閱中指定字段以限制將哪些子屬性發布到客戶端,在我的情況下,我需要Meteor.user()
所有子屬性。 但是我需要能夠選擇要響應的子屬性!
當然,將子屬性值存儲在本地,然后對每個更改進行比較當然是可行的,但這是一個蠻力解決方案,因為它需要額外的邏輯,並且無論如何都將自動運行。
我不知道這是否是最好的方法,但請看以下示例:
Tracker.autorun(function() {
var user = Meteor.user();
if (user && user.profile)
Session.set('p1', user.profile.preference1);
});
Tracker.autorun(function() {
var p1 = Session.get('p1');
console.log("p1 is " + p1);
});
每次用戶數據更改時,都會觸發第一個autorun
,但是僅當該特定屬性更改時,才會觸發第二個autorun
。
大衛的解決方案很棒(一如既往)。
為了提供一些變化,我建議將您的首選項(或整個darn配置文件)移至其自己的集合。 然后,使用.publish(null,...
來始終可以訪問該集合。
兩種解決方案都可以很好地工作,只是我偏愛除關鍵users
集合上附加的登錄憑據外,什么都不要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.