Elm开始吧

示例

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Trying out ports</title>
  </head>
  <body>
    <div id="app"></div>
    <script xx_src="elm.js"></script>
    <script>
    
      var node = document.getElementById('app');
      var app = Elm.Main.embed(node);
      
      // 订阅Elm的消息
      app.ports.toJs.subscribe(function(messageFromElm) {
        alert(messageFromElm);
        // 我们可以寄回一些东西
        // app.ports.fromJs.send('嘿,收到您的信息!JS,真诚的');
      });
      
      // 等待三秒钟,然后从JS向Elm发送消息
      setTimeout(function () {
        app.ports.fromJs.send('Hello from JS');
      }, 3000);
      
    </script>
  </body>
</html>

Main.elm

port module Main exposing (..)

import Html

port toJs : String -> Cmd msg
port fromJs : (String -> msg) -> Sub msg

main =
   Html.program
        { init = (Nothing, Cmd.none) -- our model will be the latest message from JS (or Nothing for 'no message yet')
        , update = update
        , view = view
        , subscriptions = subscriptions
        }

type Msg
    = GotMessageFromJs String

update msg model =
    case msg of
        GotMessageFromJs message ->
            (Just message, toJs "Hello from Elm")

view model =
    case model of
        Nothing ->
           Html.text"No message from JS yet :("
        Just message ->
           Html.text("来自JS的最后一条消息: " ++ message)

subscriptions model =
    fromJs GotMessageFromJs

elm-lang/html如果尚未安装软件包,请安装elm-package install elm-lang/html --yes。

使用编译此代码,以便HTML文件找到它。elm-makeMain.elm--yes --output elm.js

如果一切顺利,您应该可以打开index.html显示“无消息”文本的文件。三秒钟后,JS发送一条消息,Elm得到它,更改其模型,发送一个响应,JS得到它并打开警报。