Elmの初期化方法

Tech > Elm

Elmのパラメータを渡す方法

Elmを張り付かせる

ElmでHtml側からパラメータを渡す方法、テンプレート内のdivへidでElmのコードを張り付かせて

<div id="usrId-10">
<script type="text/javascript">
  var app = Elm.Func.init({
      flags: {
        "token": "Sj8slkusUHJ",
        "usrId": 10
      }
      , node: document.getElementById('usrId-10')
  });

引数の定義

Elm側で取得する、まず受け取るための型を用意する、要素の型はjavascript側から渡される型と合わせておく。面倒なら全部Stringでも構いませんが、Elmがしっかりマーシャルしてくれるので合わせておいた方がいいでしょう。

type alias ArgInfo =
    { token : String
    , usrId : Int
    }

モデルの定義

そして初期化でモデルへ引き継ぐ、モデルも同じく定義して

type alias Model =
    {
      token : String
    , usrId : Int
    , err : Maybe String
    }

初期化する方法

初期化は initialStatemaininit に指定されているただの関数です、init へ直接書いても同じです。

main : Program ArgInfo Model Msg
main =
    Browser.element
        { init = initialState
        , view = view
        , update = update
        , subscriptions = subscriptions
        }
...

引数を取らない場合、こうなります、合わせてinitも引数を取らないよう書く必要があります。

main : Program () Model Msg
...

そして、初期化でモデルを更新します。

initialState : ArgInfo -> ( Model, Cmd Msg )
initialState info =
    ( {
        token = info.token
      , usrId = info.usrId
      , err = Nothing 
      }
    , Cmd.none
    )

モデルの初期化

モデルが初期化されると、viewが呼ばれます、以後は update 経由でモデルが更新されます(今回は説明を省いています)。

view : Model -> Html Msg
view model =
    span [ ] [ text (String.fromInt(model.usrId)) ]

Elmは型に厳密なので、 text の型が

> Html.text
<function> : String -> Html.Html msg

なので、 String.fromIntInt から String へ変えろとしっかりやらされます(よいです)

Posted on 2021-01-26 19:48:20

はじめまして

お茶の国静岡で、焼酎のお茶割なんか罰当たりで飲んだことはありません、常に一番搾りを嗜む静岡極東のBBQerです、最近まわりのエンジニアの方々がお料理を上手にやっている姿を恨めしそうに横目に見ながら、軟骨ピリ辛チクワを食べています、みなさんよろしく。

Posted

Amazon

tags

日本酒池 広井酒店 やがら やっぱた 刺身 丸干し 東京マラソン fpm php82 servant thread spawn Rust Oracle Linux 8 microcode firmware linux openzfs zfs gitea 麒麟 真野鶴 金鶴 日本酒 docker oracle pod podman cli virtualbox VirtualBox epub mobi calibre mask lens ワンライナー php redmine Linux Oracle Map OMap omap map BBQ カテゴリ管理 カテゴリ timestamp date oracle database string 麦焼酎 ダービー process 磨き蒸留 広井酒店、日本酒 芋焼酎 焼酎 ゆるキャン 広井酒店、日本酒池 spring framework java persistent spring session session spring hdbc-odbc persistent-odbc odbc day utctime スィート レマンの森 elm初期化 elm バイク xlr80 esqueleto database xl2tpd strongswan vpn l2tp ipsec 正月 ゲーム grub nginx systemctl portage 豚骨 圧力鍋 yesod-auth-hashdb yesod-auth yesod