2016-07-28 9 views
1

このMeteorクライアントのパブリックメソッドは、が変更されたときに再実行する必要がありますが、profile.propBが変更または追加されたときにも実行されます。 他の子プロパティのprofileが変更または追加されたときに再実行されないようにするにはどうすればよいですか?ただし、profile.propAの場合のみですか? MongoDBの端子に感謝Meteor.user()。profile.myPropすべてのプロフィール子供のための反応

myListener:() => { 
     Tracker.autorun(() => { 
     if (Meteor.userId()) { 
      const indexes = Meteor.user().profile.propA; 
      if (!indexes || indexes.length <= 0) return; 
      dict.set('myStuff', indexes); 
      console.log('auto has run'); 
     } 
     }); 
    }, 

db.users.update({'_id':'123abc'}, {$set: {'profile.propB':'B'}}) 

が自動実行をトリガします。無効なデータソースがMeteor.user().profile.propA;

答えて

0

Mongo.Collection.findOneの場合は、fieldsオプションを使用してローカルデータベースから取得するフィールドを指定できます。指定されたフィールドの変更のみが、自動実行を再度トリガーします。 Meteor.user()以来

Meteor.users.findOne(Meteor.userId())のためだけの速記である、あなたはpropAのみの更新を取得するために次の操作を行うことができます。

const indexes = Meteor.users.findOne(Meteor.userId(), { 
    fields: { 
    'profile.propA': 1 
    } 
}); 

indexesだけprofile.propAが含まれていることに注意してくださいとの文書の_id。ユーザー文書からさらにデータを取得する必要があるが、依然として反応更新を個別に受信したい場合は、そのデータを2番目のautorunに取得する必要があります。

+1

私の修正をありがとう。私は、トラッカーが現場レベルに行くのに十分なほどスマートであることを認識していませんでした。 –