2017-03-08 1 views
0

Ich habe verschachtelte Komponenten. Jede Komponente hat eine Schaltfläche, um ihre verschachtelte Komponente anzuzeigen.Wie man ember-berechnete Modelldaten an verschachtelte Komponenten ohne Abfrage weitergibt?

Vom Controller übergebe ich Selectbox-Optionen (Abfrage im Geschäft) durch alle Komponenten. Aber die Abfrage wird durchgeführt, bevor die letzte Komponente mit selectbox angezeigt/gezeichnet wird. Eine echte Abfrage wird ausgeführt, wenn die zweite Komponente mit dieser Eigenschaft gezeichnet wird.

Gibt es eine Möglichkeit, die Abfrage nicht durchzuführen, bis sie wirklich benötigt wird, damit Selectbox gezeichnet werden kann? Ich wollte die Eigenschaft store nicht direkt in der geschachtelten Komponente speichern.

EDITED Wie von kumkanillam vorgeschlagen, arbeitete seine Lösung ziemlich gut, hier ist der Code, die Idee zu bekommen.

In Controler:

 reactionTimesForOptions: null, 
     allReactionTimes: function() { 
      return this.get("store").findAll("reaction-time"); 
     }.property("store"), 
     actions:{ 
      initialiseRatingOptionsData(){ 
       if(Ember.isEmpty(this.get("reactionTimesForOptions"))) { 
        this.set("reactionTimesForOptions", this.get("allReactionTimes")); 
      } 
     } 

In Controler hbs

{{#task-list 
    allReactionTimes=reactionTimesForOptions 
    initialiseRatingOptionsData=(action "initialiseRatingOptionsData")} 
{{/task-list}} 

Dann in nächsten 2 verschachtelten Komponenten

allReactionTimes=allReactionTimes 
initialiseRatingOptionsData=initialiseRatingOptionsData 

Und finnaly an Punkt klicken und meine Komponente zeigt, die müssen haben Daten aus der Datenbank, in der Komponente entscheiden über die endgültige Komponente

toggleRatingScreen(){ 
    this.initialiseRatingOptionsData(); /* at this point query are done since needed only at this point*/ 
    .... 
+0

Was meinen Sie mit 'berechneten Modelldaten'? Beziehen Sie sich auf 'Auswahlbox-Optionen'? – kumkanillam

+0

In Controller wie: allWorkQualities: function() { Rückgabe this.get ("speichern"). FindAll ("Arbeitsqualität"); } .property („store“), ich ich denke, sollte –

Antwort

1

Sie können updateSelectboxOptions zusammen mit Funktion leer selectbox Optionen Eigenschaft von der Steuerung übergeben, die selectbox Optionen aktualisieren, und in verschachtelter Komponente, wenn Sie auf den Daten benötigen, können Sie nur updateSelectboxOptions nennen.

+0

Oh das ist eine interessante Idee „computed“ Wort entfernen, meinst du mit wie „this.sendAction“ inside Aktion Controller aufgerufen, wenn die Schaltfläche Komponente zeigen, mit selectbox ist geklickt? –

+0

ja. anstelle von 'sendAction' können Sie eine Closure-Aktion verwenden. Sie können diese [Antwort] (http://stackoverflow.com/a/42296007/5771666) für weitere Informationen bezüglich Schließungsaktion folgen. – kumkanillam

+0

Kann ich mit closure action options array object zurückgeben, sodass ich clojure action nur durch verschachtelte Komponenten übergeben muss? –

Verwandte Themen