如何在Elm中填写JSON的几个下拉列表?

如何在Elm中填写JSON的几个下拉列表?,json,elm,Json,Elm,我们一直在用JSON数据填写表单,需要帮助。该组件是关于在给定城市的地区中选择病房的。 数据结构是一棵城市、地区和病房的树,其结构大致如下(所有内容都用GeoJSON包装): 在视图中,三个是用于选择城市、地区和病房的三个下拉框,因此,当用户选择城市时,将从JSON响应的属性.districts字段填充地区下拉框。 同样适用于地区下拉列表:从属性填写病房。病房 当页面加载时,它已经具有所有可用城市(以及相应的地区)的注入JSON 您对以下策略有何建议: 1) 如何获取当前选定的城市并点击下一个行

我们一直在用JSON数据填写表单,需要帮助。该组件是关于在给定城市的地区中选择病房的。 数据结构是一棵城市、地区和病房的树,其结构大致如下(所有内容都用GeoJSON包装):

在视图中,三个是用于选择城市、地区和病房的三个下拉框,因此,当用户选择城市时,将从JSON响应的
属性.districts
字段填充地区下拉框。 同样适用于地区下拉列表:从
属性填写病房。病房
当页面加载时,它已经具有所有可用城市(以及相应的地区)的注入JSON

您对以下策略有何建议:

1) 如何获取当前选定的城市并点击下一个行政区划的服务器?即,当用户选择District时,获取其
slug
并查询病房服务器


2) 如何从响应或页面上注入的JSON中填充后续select?也就是说,当用户选择另一个城市时,在地区选择框中填入相应的地区?

以下是我过去做过类似事情的方式(在elm v0.17.0中):

您将对地区重复相同操作以获得病房。

启动 如果所选城市已知,则在启动之前,您可以将其作为标志传递给

你可以对城市列表做同样的事情

请看这个例子,它涵盖了大部分内容

如果您想在启动时发送
xhr
请求,您可以使用一个小技巧:

init : String -> (Model, Cmd Msg)
init topic =
  ( Model topic "waiting.gif"
  , getRandomGif topic
  )
其中,
getRandomGif
将在启动时执行
xhr
请求,假设您已通过将其作为标志传递或用户输入获得了一些数据

在每次
fetchsuccess
上,您应该发送下一个
xhr
,以获取下一步的数据

流动 请考虑这个流程图,说明你的多步形式的流程。虚线箭头指向步骤,如果要在某个点更改城市/地区,可以在该步骤中重新启动循环

缓存层是可选的,Elm为此提供了多种数据结构


这个问题感觉有点太宽泛了。你想达到什么目标?您想减少
xhr
请求的数量吗?我们只是想用JSON数据填充下拉框。问题是我们不知道如何从同一个请求/数据集(Cit和地区、地区和病房对)中填写家长和孩子下拉列表。
dropdown : List City -> Html Msg
dropdown cities =
    div []
        [ div []
              [ span [] [ text "dropdown label name" ]
              , selectOptions cities
              ]
        ]


selectOptions : List City -> Html Msg
selectOptions cities = 
      select [ on "change" ( Json.map (\city -> GetDistrictsMsg city) targetValue ) ]
            (List.map setOption cities)


setOption : City -> Html Msg
setOption city =
    option [ value city.name ]
           [ text city.name ]
init : String -> (Model, Cmd Msg)
init topic =
  ( Model topic "waiting.gif"
  , getRandomGif topic
  )