在我的榆树应用程序中,有一个父母和一个孩子。我希望孩子发送一个HTTP命令,然后父母会通过添加子模型没有的后端配置来动态更新它。
我看到它的方式是:
我想在子模块中实现HTTP操作,因此我的应用程序保持模块化,同时将配置保存在一个位置。
欢迎任何帮助。也许一种不同的方法也可以解决我的问题!
答案 0 :(得分:2)
将所有配置详细信息保存在处理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。
LATER EDIT:
另一种选择是定义和传递动态上下文。您可以在顶层管理此上下文,并在更新时立即传递当前版本。它看起来像这样
在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} ! []