2016-12-29 3 views
0

Я определил простой serverResponse, чтобы имитировать ответ от api для синтаксического анализа в elm-lang.Как отобразить результат HTML из результата типа в вязах?

У меня проблема с Result, чтобы показать HTML-информацию!

Каков наилучший способ для этого?

import String exposing (..) 

import String exposing (..) 
import List exposing (..) 

import Result exposing (map) 

import Json.Decode as Json exposing (..) 

type alias Team = 
    { department : String 
    , names: List String 
    } 

serverResponse = 
    """ 
    [{"department":"product","names":["bob","sally","george"]},{"department":"marketing","names":["billy","diane","anita"]},{"department":"sales","names":["howard","steve","isha"]}] 
    """ 

stringDecoder = 
    Json.list Json.string 

infoDecoder : Json.Decoder Team 
infoDecoder = 
    Json.map2 Team 
     (Json.field "department" Json.string) 
     (Json.field "names" stringDecoder) 

teamDecoder : Json.Decoder (List Team) 
teamDecoder = 
    Json.list infoDecoder 

toList team = 
    p [] [ 
    team.department 
    ] 

transformList teams = 
     toList teams 

main = 
    Json.decodeString teamDecoder serverResponse 
    |> toString 
    |> text 

ответ

2

Вы можете использовать case заявление для извлечения результатов декодирования. Это позволяет явно обрабатывать как успех, так и отказ декодера.

Ваша main функция может быть изменена следующим образом (Обратите внимание, что я пересмотрел toList, потому что вы не возвращались действительный Html):

toList : Team -> Html msg 
toList team = 
    p [] [ text team.department ] 

main = 
    case Json.decodeString teamDecoder serverResponse of 
     Ok teams -> 
      div [] (List.map toList teams) 

     Err msg -> 
      text ("ERROR: " ++ msg) 

Result тип союза с двумя конструкторами: Ok и Err. Вы можете прочитать на union types in the Elm Guide.

0

Существует также withDefault для быстрой проверки

Result.withDefault 0 (String.toInt "123") == 123 
Смежные вопросы