Elm:更新来自嵌套模块的命令
Elm: Update a command coming from nested module
在我的 Elm 应用程序中,有一个 parent 和一个 child。我希望 child 发送一个 HTTP 命令,然后 parent 会通过添加 child 模型没有的后端配置来动态更新它。
我的看法是:
- child发送HTTP命令(更新函数)
- 命令转入parent(更新函数)
- parent将配置添加到命令(这可能吗??)
- 最终执行命令并包含所有必需的参数
我想在 children 模块中实现 HTTP 操作,以便我的应用程序保持模块化,同时将配置保留在一个地方。
欢迎任何帮助。也许不同的方法也能解决我的问题!
将所有配置详细信息保存在处理 Http 请求的模块中。例如,您可以在 Requests.elm
中包含此代码
import Http
import Task
url = "http://ip.jsontest.com/"
getIP : (String -> msg) -> Cmd msg
getIP tagger =
Http.getString url
|> Task.perform (\e -> tagger (toString e)) tagger
然后在组件代码中有类似
的内容
update msg model =
case msg of
GetIP -> model ! [Requests.getIP ShowIP]
ShowIP str -> {model | ipStr = str} ! []
所有配置细节都对组件隐藏。只公开了 API 的访问权限。
后期编辑:
另一种选择是定义和传递动态上下文。您可以在顶层管理此上下文,并在更新内容时传递当前版本。它看起来像这样
在Requests.elm
import Http
import Task
type alias Context =
{ url : String }
getIP : Context -> (String -> msg) -> Cmd msg
getIP ctx tagger =
Http.getString ctx.url
|> Task.perform (\e -> tagger (toString e)) tagger
在组件中:
update ctx msg model =
case msg of
GetIP -> model ! [Requests.getIP ctx ShowIP]
ShowIP str -> {model | ipStr = str} ! []
在我的 Elm 应用程序中,有一个 parent 和一个 child。我希望 child 发送一个 HTTP 命令,然后 parent 会通过添加 child 模型没有的后端配置来动态更新它。
我的看法是:
- child发送HTTP命令(更新函数)
- 命令转入parent(更新函数)
- parent将配置添加到命令(这可能吗??)
- 最终执行命令并包含所有必需的参数
我想在 children 模块中实现 HTTP 操作,以便我的应用程序保持模块化,同时将配置保留在一个地方。
欢迎任何帮助。也许不同的方法也能解决我的问题!
将所有配置详细信息保存在处理 Http 请求的模块中。例如,您可以在 Requests.elm
中包含此代码import Http
import Task
url = "http://ip.jsontest.com/"
getIP : (String -> msg) -> Cmd msg
getIP tagger =
Http.getString url
|> Task.perform (\e -> tagger (toString e)) tagger
然后在组件代码中有类似
的内容update msg model =
case msg of
GetIP -> model ! [Requests.getIP ShowIP]
ShowIP str -> {model | ipStr = str} ! []
所有配置细节都对组件隐藏。只公开了 API 的访问权限。
后期编辑:
另一种选择是定义和传递动态上下文。您可以在顶层管理此上下文,并在更新内容时传递当前版本。它看起来像这样
在Requests.elm
import Http
import Task
type alias Context =
{ url : String }
getIP : Context -> (String -> msg) -> Cmd msg
getIP ctx tagger =
Http.getString ctx.url
|> Task.perform (\e -> tagger (toString e)) tagger
在组件中:
update ctx msg model =
case msg of
GetIP -> model ! [Requests.getIP ctx ShowIP]
ShowIP str -> {model | ipStr = str} ! []