程式
當你的應用程式不需要任何外部資料進行初始化時,program
是一個很好的選擇。
它能夠處理訂閱和命令,從而為處理 I / O 提供更多機會,例如 HTTP 通訊或與 JavaScript 互操作。
初始狀態需要與模型一起返回啟動命令。
program
的初始化將需要提供 subscriptions
,以及 model
,view
和 update
。
檢視型別定義:
program :
{ init : ( model, Cmd msg )
, update : msg -> model -> ( model, Cmd msg )
, subscriptions : model -> Sub msg
, view : model -> Html msg
}
-> Program Never
例
最簡單的說明方法是,如何使用 Subscriptions 來設定與 JavaScript 的簡單埠通訊。
瞭解如何在 Initialize 和 build / Embedding into HTML 中構建示例
port module Main exposing (..)
import Html exposing (Html, text)
import Html exposing (program)
main : Program Never
main =
program
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
}
port input : (Int -> msg) -> Sub msg
-- MODEL
type alias Model =
Int
init : ( Model, Cmd msg )
init =
( 0, Cmd.none )
-- UPDATE
type Msg = Incoming Int
update : Msg -> Model -> ( Model, Cmd msg )
update msg model =
case msg of
Incoming x ->
( x, Cmd.none )
-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions model =
input Incoming
-- VIEW
view : Model -> Html msg
view model =
text (toString model)
<!DOCTYPE html>
<html>
<head>
<script src='elm.js'></script>
</head>
<body>
<div id='app'></div>
<script>var app = Elm.Main.embed(document.getElementById('app'));</script>
<button onclick='app.ports.input.send(1);'>send</button>
</body>
</html>