2016-01-05 3 views
1

Я пытаюсь открыть одно всплывающее окно при успешном представлении другого в scalajs-реакции. Моя проблема заключается в том, что состояние успеха не изменяется. Вот мой метод addNewAgent, называемый обратным вызовом при отправке первого всплывающего окна.Настройка состояния в ajax-успехе в scalajs-реагировании

def addNewAgent(userModel: UserModel, addNewAgent: Boolean = false): Callback = { 
    println(addNewAgent) 
    if(addNewAgent){ 
    createUser(userModel).onComplete { 
     case Success(s) => 
     println(s.msgType) 
     if (s.msgType == ApiResponseMsg.CreateUserWaiting){ 
      t.modState(s => s.copy(showNewAgentForm = false, showConfirmAccountCreation = true)) 
     } else { 
      t.modState(s => s.copy(showNewAgentForm = false, showRegistrationFailed = true)) 
     } 
     case Failure(s) => 
     println(s) 
     t.modState(s => s.copy(showRegistrationFailed = true)) 
     // now you need to refresh the UI 
    } 
    t.modState(s => s.copy(showNewAgentForm = false)) 
    } else { 
    t.modState(s => s.copy(showNewAgentForm = false)) 
    } 
} 

и компонентный код:

val component = ReactComponentB[Props]("AddNewAgent") 
.initialState(State()) // initial state from TodoStore 
.backend(new Backend(_)) 
.renderPS(($, P, S) => { 
    val B = $.backend 
    <.div()(
    Button(Button.Props(B.addNewAgentForm(), CommonStyle.default, Seq(HeaderCSS.Style.SignUpBtn)),"Sign Up"), 
    if (S.showNewAgentForm) NewAgentForm(NewAgentForm.Props(B.addNewAgent))   
    else if (S.showConfirmAccountCreation ) ConfirmAccountCreation(ConfirmAccountCreation.Props(B.confirmAccountCreation)) 

     else 
     Seq.empty[ReactElement] 
) 
}) 
// .componentDidMount(scope => scope.backend.mounted(scope.props)) 
.configure(OnUnmount.install) 
.build 
def apply(props: Props) = component(props) 

ответ

2

Для тех, кто ищет ответ на эту проблему, что происходит здесь в том, что на modState звонки внутри будущего завершения никогда не будет на самом деле называется , потому что они вернуть обратный вызов, который не запускается. Чтобы решить эту проблему, вам необходимо добавить runNow(), например t.modState(s => s.copy(showNewAgentForm = false, showRegistrationFailed = true)).runNow()

Смежные вопросы