2017-02-15 7 views
0

ここに私のシナリオがあります:Meteorサブスクリプションが変更されたときにローカルコレクションのIDが重複する

私はカレンダーイベントのコレクションを持っています。一部のイベントには、繰り返しルールが設定されています。クライアントのイベントを購読すると、LocalEventsという新しいローカルコレクションが作成されます。 Eventsコレクションから公開されたすべてのイベントをループし、自分のイベントが発生するたびにローカルコレクションに新しい文書を挿入します。繰り返されるインスタンスがあるとして地元のコレクションはまだそれにいくつかの文書を保持しているようだ - ここ

は私の問題は、ときに私のサブスクリプションの変更(検索バーを使用して)ということで、コメント

//create reactive variable 
const searchQuery = new ReactiveVar(null); 

export default createContainer(({ params }) => { 
    //subscribe to subscription passing the reactive var as the variable 
    const subscription = Meteor.subscribe('Events.publications.admin.list.all', searchQuery.get()); 
    const loading = !subscription.ready(); 
    const allEvents = Events.find(); 

    //loop through cursor, if event recurs - create new document for the event and insert it in to LocalEvents collection 
    allEvents.forEach(function(event) { 
     if (event.eventRecurs) { 
      //grab array of all recurring dates 
      const dates = event.recurringDates; 
      //loop through recurring dates and create new event document for each with a random ID and a parentId of the original event 
      _.each(dates, (date) => { 
       LocalEvents.insert({ 
        '_id': Random.id(), 
        'name': event.name, 
        'description': event.description, 
        'defaultDate': date, 
        'parentId': event._id 
       }); 
      }) 

     } else { 
      //if event doesn't recur, set parentId and insert into local collection 
      event.parentId = event._id; 
      LocalEvents.insert(event); 
     } 
    }); 

    const events = LocalEvents.find({}, { sort: { defaultDate: 1 }}).fetch(); 
    //pass everything to the component 
    return { loading, events, searchQuery }; 
}, AdminEventsAll); 

と私のコードですイベントの私がサブスクリプション(searchQuery)に渡す引数は、UIの検索バーでキーが押されるたびに設定されます。これにより、反応的な検索が作成されます。私がタイプするとき、私がタイプする各文字について、私はその文書が重複しているのを見る。それは基本的に、ローカルコレクションが同じ文書を補充しているので、何度も何度も繰り返していることを示しています。

searchQueryが変更されるたびにコレクションがコンテナ内で正しく空になるようにするにはどうすればよいですか?事前

おかげ** EDIT - FOUND SOLUTION **

は、私は同様の問題を持っている誰のための答え

答えて

0

として発見溶液を加え、私は見つけることができました溶液。

私は、今

Tracker.autorun(function(allEvents) { 
    LocalEvents.remove({}); 
}); 

を追加したサブスクリプションの変更から、いつでもカーソルを(例えば、ユーザの検索とsearchQuery反応VARを変更する)、トラッカー機能は、ローカルコレクションがクリアされますし、それは次のようになります再増殖した。

関連する問題