2016-07-23 6 views
0

Ich brauche Ihre Hilfe oder einen Vorschlag bezüglich meiner Refresh-Funktion. Ich habe diese Schaltfläche namens Aktualisieren, die bei einem Klick aktualisiert wird (die Datensortierung basierend auf createdAt Feld neu anordnen). Ich habe seit Tagen gekämpft um zu versuchen, das richtig zu bekommen, indem ich das neu abmelde, das ich nicht sicher bin, ob es der richtige Weg ist oder nicht.Meteor JS PubSub basiert auf Aktion

Gibt es eine korrekte Möglichkeit, eine Sammlung auf dem Client neu zu abonnieren oder neu zu sortieren, wenn auf die Schaltfläche geklickt wird? Danke vielmals.

Antwort

1

Ja, Sie können dies tun, mit folgenden Schritten:

  • übergeben Sie den Sortiertyp (auf oder ab) in der Router-Abfrage.
  • Aktualisieren Sie die Subscribe-Sortierung des Servers.
  • Sie müssen auch Ihre clientseitigen find() -Methoden sortieren, denn wenn sich die Daten nicht ändern oder wenige Dokumente durch Ihr Re-Abonnement aktualisiert werden, werden die ältesten Daten immer zuerst kommen.
  • Sie können die Sammlung auf Router- oder Vorlagenebene abonnieren oder erneut abonnieren. Wenn Sie Flow Rotuer verwenden, funktioniert Ihre erneute Anmeldung nicht, da der Flow-Router nicht reaktiv ist. Ich bevorzuge das Abonnement auf Vorlagenebene. Verwenden der Iron-Router-Abfrage. Hier

ist das Codebeispiel:

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

dankt Ihnen so viel :) –