【问题标题】:ELM model and Data from Rest Json来自 Rest Json 的 ELM 模型和数据
【发布时间】:2017-09-18 11:28:55
【问题描述】:

在大多数示例中,模型都是使用我们知道的现有字段/数据构建的,

type alias Model =
  { topic : String
  , gifUrl : String
  }

假设我正在构建一个应用程序,我需要通过 REST 执行 CRUD 操作,并且某些字段事先不知道,这对于单元测试和快速开发来说更方便。

我们如何对从 REST/JSON 生成的动态字段进行建模?

【问题讨论】:

  • 对未知字段有什么期望?您的解码器不必提取所有字段或精确匹配您的模型。您是否正在尝试将未知字段从 GET 请求回显到 PUT 不变?
  • 是的,获取自定义字段并将相关数据发布到服务器或将带有可变字段的列表加载到表中
  • 可以使用dict先解码成字典,只对已知字段进行操作

标签: python json rest elm


【解决方案1】:

将动态字段包装在Maybe 或使用Dict 在这种情况下各有其缺点;是字段Nothing 是因为它还没有加载,还是因为它失败了?

RemoteData type 更适合这里;通过表示四种状态中的每一种(未询问、加载、失败和成功),它允许这样的代码:

view : Model -> Html msg
view model =
  case model.news of
    NotAsked -> text "Initialising."

    Loading -> text "Loading."

    Failure err -> text ("Error: " ++ toString err)

    Success news -> viewNews news


viewNews : News -> Html msg
viewNews news =
    div []
        [h1 [] [text "Here is the news."]
        , ...]

文章How Elm Slays a UI Antipattern对此进行了更详细的解释。

【讨论】:

    【解决方案2】:

    动态字段是不可能的,因为您应该在程序执行过程中具有相同的结构。你可能想做类似的事情

    type alias Model =
      { topic : String
      , gifUrl : String
      , field1 : String
      , person : Maybe Person
      }
    

    带有Maybe的字段代表可选字段

    你应该使用解码器来解码 json link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-08
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      相关资源
      最近更新 更多