2017-04-03 73 views
0

我試圖解碼來自http請求的一些json,但我一直遇到語法問題。這是我從編譯器得到的錯誤:Elm Json解碼器流水線錯誤

-- 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 

這裏是我的代碼:

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 

我是相當新的榆樹,我試圖找出如何API調用工作。榆樹文檔非常好,但是關於API調用的一點很模糊。我將不勝感激任何幫助。非常感謝!

回答

3

您在郵​​件中聲明:

CardFetch (Result Http.Error String) 

這意味着成功的響應將產生的字符串。但是,您的modelDecoder正在返回ModelmodelDecoder : Decoder Model

更改您的留言聲明:

CardFetch (Result Http.Error Model) 

和更新功能:

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

應該有所幫助。