2017-08-06 17 views
0

私は比較的簡単な問題があるはずです。セッションを設定してから、セッションに格納されている文字列を使用してコレクションを購読します。しかし、そのセッションが変更されたら、私はサブスクリプションデータをクリアしてから再開する必要があります。次のように流星定期購読は停止していません

私のコードは次のとおりです。

let subscriptionReady; 
let filteredResults = []; 
let rawResults = []; 
let county = Session.get('county'); 
let type = Session.get('type'); 

これは主に、後に投入するためにいくつかの空のオブジェクトを作成するだけの準備作業です。これはすべてクリックイベントに設定されます。我々はこれらのプレースホルダーオブジェクトを設定した後、我々は行くとこれらのセッションで購読:

if (county && !type) { 
    return function() { 
     if (subscriptionReady) { 
     subscriptionReady.stop(); 
     } 

     filteredResults = []; 
     rawResults = []; 

     subscriptionReady = Meteor.subscribe('resourcesearch', county, { 
     onReady:() => { 
      rawResults = resourceCollection.find({}, { sort: {score: -1} }).fetch(); 

      rawResults.forEach((result) => { 
      if (result.score) { 
       filteredResults.push(result); 
      } 
      }); 
     } 
     }); 
    } 

を私はsubscriptionReadyが存在する場合は、チェックを確認するために実行する三行目では、それが利用可能stopメソッドを持つことになります。だから私はそれを実行します。しかし、実際に何かを止めるわけではありません。

私には何が欠けていますか?

答えて

0

試行錯誤の末、私はそれを解決しました。問題は、ストップコールの配置でした。私はもはやsubscriptionReadyが存在するかどうかを確認する必要はありません、代わりに私がonReadyメソッドの内部購読停止:

return function() { 
     filteredResults = []; 
     rawResults = []; 

     subscriptionReady = Meteor.subscribe('resourcesearch', county, { 
     onReady:() => { 
      rawResults = resourceCollection.find({}, { sort: {score: -1} }).fetch(); 

      rawResults.forEach((result) => { 
      if (result.score) { 
       filteredResults.push(result); 
      } 
      });    

      subscriptionReady.stop(); 
     } 
     }); 
+1

メソッドを使用して適切なデータを取得するのではなく、そのすべての問題をなぜ解決しますか? – tomsp

+0

これは実際には素晴らしい提案です。おそらく、私は長い間、長い間、流星で働いていなかったからでしょう。 – thatgibbyguy

+1

実際、このコメントの本当のMVCです。私の答えは正しいですが、あなたの提案は良いです。ありがとうございました! – thatgibbyguy

0

それはまた、あなたは、おそらくあなたのクエリでscoreを含めることによって、あなたのフィルタリングループを回避することができ.stop()ない.stopdocs

です。 scoreキーが存在するドキュメントを探していますか{score: {$exists: true}}またはそれがゼロ以外の場所{$score: {$ne: 0}}

また、サブスクリプションをクリアして再度開始する必要はありません。サブスクリプションパラメータresourcesearch反応性データソースにすると、サブスクリプションが自動的に更新され、必要な文書が提供されます。検索に応答してサブスクリプションを開始/停止することは、アンチパターンになります。

+0

は私が間違ってコピーし、私は実際に ')('ストップを使用しています。それを反映するために更新された投稿。 – thatgibbyguy

関連する問題