0

ステップベースのフォームジャーニーでのコンポーネントとイベント処理のために、アプリケーションでRiotJSRiotControlを使用しています。フォーム画面の 1 つは、基本的に 2 つの店舗に送られるデータを収集します。昔はこれをマルチモデル ビューと呼び、Rails などのビュー モデルで処理していました。この画面では、顧客に関する情報と実際の移動に関する情報が収集されるため、フォームが送信されると、2 つの異なる懸念事項が 2 つの異なる店舗に送信されます。

// 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. 

})

次のフォーム画面では、レンダリング前に両方のストアからの情報が必要になるため、この画面をマウントしてレンダリングする前に、2 つのストアからの両方の更新イベントが確実にトリガーされるようにする方法を理解するのに苦労しています。イベント ハンドラーの後続のトリガー。このようなことは可能ですか、それとも間違った方法で行っていますか?

どうもありがとう

4

1 に答える 1

0

おそらく、現在のステップの状態が必要になるでしょう (適切な場所は、これらのコンポーネントの親になると思います)。

たとえば、customerDetails:updated は currentStep を 1 に更新し、surveyDetails:updated は currentStep を 2 に更新します。次に、nextScreen.on で現在のステップを確認し、次のステップに進みます。

于 2016-09-21T12:49:38.930 に答える