0

我在我的应用程序中使用RiotJSRiotControl进行基于步骤的表单旅程中的组件和事件处理。其中一个表单屏幕主要收集发送到两家商店的数据。用旧的钱,我称之为多模型视图,并会用 Rails 之类的视图模型来处理这个问题。该屏幕收集有关客户的信息以及有关实际旅程的信息,因此在提交表单时会将两个单独的关注点发送到两个不同的商店。

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

})

下一个表单屏幕需要在渲染之前来自两个商店的信息,所以我很难看到我如何确保在安装和渲染此屏幕之前触发来自两个商店的两个更新事件,同时维护来自每个商店的数据事件处理程序的后续触发器。这样的事情可能吗,还是我以错误的方式解决这个问题?

非常感谢

4

1 回答 1

0

可能您将需要您当前所在步骤的状态(我认为一个好地方将是这些组件的父级)。

例如,customerDetails:updated 会将 currentStep 更新为 1,然后surveyDetails:updated 会将 currentStep 更新为 2。然后在 nextScreen.on 中,检查您所在的步骤,然后转到下一步。

于 2016-09-21T12:49:38.930 回答