2016-07-26 2 views
0

Ich verwende RiotJS und RiotControl in meiner Anwendung für Komponenten und Event-Handling in einer schrittweisen Form Reise. Einer der Formularbildschirme sammelt im Wesentlichen Daten, die zu zwei Speichern gehen. In altem Geld würde ich dies eine Multi-Modell-Ansicht nennen, und würde dies mit einem Ansichtsmodell in etwas wie Rails behandeln. Der Bildschirm sammelt Informationen über den Kunden und Informationen über die tatsächliche Reise, so dass beim Abschicken des Formulars zwei separate Bedenken an zwei verschiedene Geschäfte gesendet werden.RiotControl Trigger Aktion von mehreren Geschäften

// Store Examples 

function customerDetails() { 

    riot.observable(this); 

    this.customer = {firstName: undefined, lastName: undefined} 

    this.on('form-step:submitted', function(answers){ 
    this.customer.firstName = answers.firstName, 
    this.customer.lastName = answers.lastName 

    RiotControl.trigger('customerDetails:updated', this.customer); 
    }) 
} 

function surveyDetails() { 

    riot.observable(this); 

    this.survey = {questionOne: undefined, questionTwo: undefined} 

    this.on('form-step:submitted', function(answers){ 
    this.survey.questionOne = answers.questionOne, 
    this.survey.questionTwo = answers.questionTwo 

    RiotControl.trigger('surveyDetails:updated', this.customer); 
    }) 
} 

// In main code 

nextScreen.on('surveyDetails:updated customerDetails:updated', function(details){ 

    // I care about both of these events, but only want to execute 
    // this code once I've received the details from both stores. 

}) 

Der nächste Form Bildschirm erfordert Informationen aus beiden Geschäften vor dem Rendern, also ist ich kämpfen, um zu sehen, wie ich sicher, dass beiden Aktualisierungsereignisse aus den beiden Geschäften ausgelöst wurden, vor der Montage und macht diesen Bildschirm, unter Beibehaltung die Daten von jedem Speicher von dem nachfolgenden Auslöser des Ereignisbehandlers. Ist so etwas möglich, oder mache ich das falsch?

Vielen Dank

Antwort

0

Wahrscheinlich müssen Sie den Zustand der Sie gerade Schritt sind (ich glaube, ein guter Ort, wird die Eltern dieser Komponenten sein).

Zum Beispiel aktualisiert customerDetails: updated den currentStep auf 1, und dann surveyDetails: updated aktualisiert currentStep auf 2. Und dann in Ihrem nextScreen.on, überprüfen Sie, in welchem ​​Schritt Sie sind, und verschieben Sie die nächster Schritt.

Verwandte Themen