2017-04-03 4 views
0

Ich versuche, einige JSON aus einer HTTP-Anfrage kommen zu dekodieren, aber ich laufe immer wieder in Syntaxprobleme. Dies ist der Fehler, den ich vom Compiler erhalten:Elm Json Decoder Pipeline Fehler

-- TYPE MISMATCH ------------------------------------------------------ [7/1811$ 

The 2nd argument to function `send` is causing a mismatch. 

65|  Http.send CardFetch (Http.get url modelDecoder) 
          ^^^^^^^^^^^^^^^^^^^^^^^^^ 
Function `send` is expecting the 2nd argument to be: 

    Http.Request String 

But it is: 

    Http.Request Model 

Hier ist mein Code:

module Main exposing (..) 

import Html exposing (..) 
import Html.Attributes exposing (..) 
import Html.Events exposing (..) 
import Http 
import Json.Decode as Decode exposing (string, Decoder, at, index) 
import Json.Decode.Pipeline exposing (..) 


main : Program Never Model Msg 
main = 
    program 
     { init = init 
     , view = view 
     , update = update 
     , subscriptions = subscriptions 
     } 


type alias Model = 
    { boardName : String 
    , cardName : String 
    } 


init = 
    (Model "Default Board" "Default Card" 
    , Cmd.none 
    ) 



-- UPDATE 


type Msg 
    = CardFetch (Result Http.Error String) 
    | DataFetch 


update : Msg -> Model -> (Model, Cmd Msg) 
update msg model = 
    case msg of 
     DataFetch -> 
      (model, getData) 

     CardFetch (Ok incomingName) -> 
      (Model model.cardName incomingName, Cmd.none) 

     CardFetch (Err errorMessage) -> 
      (model, Debug.log "Errors" Cmd.none) 



-- HTTP 


url : String 
url = 
    "https://api.trello.com/1/members/user/actions?limit=3&key=..." 


getData = 
    Http.send CardFetch (Http.get url modelDecoder) 



{--decodeCard = 
    Decode.index 0 
     modelDecoder 
     (Decode.at 
      [ "data", "card", "name" ] 
      string 
     ) 
     --} 


modelDecoder : Decoder Model 
modelDecoder = 
    decode Model 
     |> custom (index 0 (at [ "data", "card", "name" ] string)) 
     |> custom (index 0 (at [ "data", "board", "name" ] string)) 



--UPDATE 
-- VIEW 


view : Model -> Html Msg 
view model = 
    div [] 
     [ div [] 
      [ button [ onClick DataFetch ] [ text "Get Card" ] ] 
     , div [ class "card" ] 
      [ h3 [] [ text model.boardName ] 
      , div [ class "board" ] [ h4 [] [ text model.cardName ] ] 
      ] 
     ] 



-- SUBSCRIPTIONS 


subscriptions : Model -> Sub Msg 
subscriptions model = 
    Sub.none 

Ich bin bin ziemlich neu in Elm und ich versuche, herauszufinden, wie API Arbeit nennt. Elm Dokumentation ist ausgezeichnet, aber das bisschen über API-Anrufe ist irgendwie vage. Ich würde jede Hilfe schätzen, die ich bekommen kann. Danke vielmals!

Antwort

3

Sie erklärt in Ihrer Nachricht:

CardFetch (Result Http.Error String) 

was bedeutet, dass erfolgreiche Antwort String produzieren wird. Ihre modelDecoder gibt jedoch Model zurück: modelDecoder : Decoder Model.

Ändern Sie Ihre Nachricht Erklärung:

CardFetch (Result Http.Error Model) 

und in Update-Funktion:

CardFetch (Ok incomingName) -> 
    (incomingName, Cmd.none) 

helfen sollte.