2016-07-23 10 views
0

私のリフレッシュ機能に関するご意見やご提案があります。私は、このボタンをクリックすると、それが更新されます(createdAtフィールドに基づいてデータソートを再配置する)というリフレッシュと呼ばれるボタンがあります。私はそれが正しい方法であるかどうかわからない再登録によってこれを正しく取得しようとしている間、数日間戦ってきました。アクションに基づくMeteor JS PubSub

ボタンをクリックしたときに、クライアントでコレクションを再サブスクライブまたは再ソートする正しい方法はありますか?どうもありがとう。

答えて

1

はい、次の手順でこれを行うことができます。

  • は、ルータクエリーにソートタイプ(ASCまたはDESC)を渡します。
  • サーバーのサブスクライブソートを更新します。
  • データが変更されないか、再購読によって更新されるドキュメントがほとんどないので、最も古いデータが常に最初に来るので、クライアント側のfind()メソッドのソートも更新する必要があります。
  • ルーターレベルまたはテンプレートレベルのいずれかで、コレクションの購読または再購読を行うことができます。 Flow Rotuerを使用している場合は、フロールーターが反応しないため、再購読は機能しません。私はテンプレートレベルでサブスクリプションを使用することを好む。 Ironルータのクエリを使用します。ここで

コードサンプルです:あなたはそんなに

Templete.templeteName.onRendered(function(){ 
    this.autorun(function(){ 
     var sort = {}; 
     if(!Router.current().params.query || Router.current().params.query.sortType == 1) { 
      sort.createdAt = 1; 
     } else { 
      sort.createdAt = -1; 
     } 
     //You can use this handle to show/hide loader. 
     var handle = Meteor.Subscribe('subscriptionName', sort); 
    }) 
}) 
Templete.templeteName.helpers({ 
    'data' : function(){ 
     var sort = {}; 
     if(!Router.current().params.query || Router.current().params.query == 1) { 
      sort.createdAt = 1; 
     } else { 
      sort.createdAt = -1; 
     } 

     return collection.find({},{sort:sort}); 
    } 
}); 

Templete.templeteName.events({ 
    'click .refresh' : function(){ 
     var sortType = value //get the value -1 or 1 from html. 
     Router.go('routeNaem',{},{query:{sortType:sortType}}) 
    } 
}); 
+0

感謝:) –

関連する問題