【问题标题】:Elm send message to mailbox in update function [duplicate]榆树在更新功能中向邮箱发送消息[重复]
【发布时间】:2016-01-24 16:16:49
【问题描述】:

我在 Elm StartApp MUV 框架的更新函数中有以下 Action 处理程序。

signupAlertMailbox : Signal.Mailbox String
signupAlertMailbox =
  Signal.mailbox ""

update : Action -> Model -> (Model, Effects Action)
update action model =
  case action of
    Submit ->
      let isInputValid = Dict.foldl (\fieldName fieldState validity -> if validity
                                                                then (fieldState == IsOkay)
                                                                else validity)
                                                                True model.inputState
          rnd = log "Input valid" isInputValid
      -- in (model, Effects.none)
      in if isInputValid
            then (model, Signal.send signupAlertMailbox.address "Oh snap! Change a few things up and try submitting again."
                                |> Effects.task
                                |> Effects.map (always Submit))
            else (model, Signal.send signupAlertMailbox.address "Well done! All input correct!"
                                |> Effects.task
                                |> Effects.map (always Submit))

提交操作后,我可以在浏览器控制台中看到日志消息,但没有消息发送到 signupAlertMailbox。请帮我解决这个问题。

-- 编辑

StartApp 按照以下评论的要求连接代码:

import StartApp exposing (start)
import Time exposing (every, second)

import Pages.Signup.Model
import Pages.Signup.Update exposing (signupAlertMailbox)
import Pages.Signup.View

app =
  start
    { init = Pages.Signup.Model.init
    , view = Pages.Signup.View.view
    , update = Pages.Signup.Update.update
    , inputs = []
    }

【问题讨论】:

  • 你能把你的代码连接到 StartApp 上吗?当start 的返回值没有将app.tasks 分配给端口时,通常会出现此类问题
  • 我已经添加了连接 StartApp 的代码。请协助我。谢谢。
  • 我把 app.tasks 交给了你提到的一个端口,效果很好。谢谢! :)
  • 哦,我是 Elm 的新手,仍然理解信号、任务和效果。对不起,重复。
  • 别担心!该标志只是标准的 stackoverflow 管理。它为将来可能有类似问题的网站访问者留下了书面记录。

标签: elm


【解决方案1】:

原因是我没有将 app.tasks 移交给一个端口以便执行它,正如 Chad Gilbert @chad-gilbert 在上面的评论中提到的那样。谢谢!

我添加了以下部分,并开始通过更新功能在 sigupAlertMailbox 邮箱中获取这些消息

port tasks : Signal (Task.Task Never ())
port tasks =
  app.tasks

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    相关资源
    最近更新 更多