作者:_嗚啦啦900 | 来源:互联网 | 2022-12-06 17:42
我正在尝试从0.18升级到0.19的Elm.我的项目取决于elm-lang/websocket
0.18?我似乎无法在0.19中找到相应的包.我错过了什么?
1> Matt..:
这是一个交互式表单的最小工作示例,该表单使用2个简单的输入/输出端口从echo.websocket.org回显输入,以与elm 0.19模块外部的Javascript WebSocket对象进行通信:
文件:echo.elm。编译:elm make echo.elm --output=echo.js
port module Main exposing (main)
import Browser
import Html exposing (Html)
import Html.Attributes as HA
import Html.Events as HE
import Json.Encode as JE
-- Javascript usage: app.ports.websocketIn.send(response);
port websocketIn : (String -> msg) -> Sub msg
-- Javascript usage: app.ports.websocketOut.subscribe(handler);
port websocketOut : String -> Cmd msg
main = Browser.element
{ init = init
, update = update
, view = view
, subscriptiOns= subscriptions
}
{- MODEL -}
type alias Model =
{ responses : List String
, input : String
}
init : () -> (Model, Cmd Msg)
init _ =
( { respOnses= []
, input = ""
}
, Cmd.none
)
{- UPDATE -}
type Msg = Change String
| Submit String
| WebsocketIn String
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
Change input ->
( { model | input = input }
, Cmd.none
)
Submit value ->
( model
, websocketOut value
)
WebsocketIn value ->
( { model | respOnses= value :: model.responses }
, Cmd.none
)
{- SUBSCRIPTIONS -}
subscriptions : Model -> Sub Msg
subscriptions model =
websocketIn WebsocketIn
{- VIEW -}
li : String -> Html Msg
li string = Html.li [] [Html.text string]
view : Model -> Html Msg
view model = Html.div []
--[ Html.form [HE.onSubmit (WebsocketIn model.input)] -- Short circuit to test without ports
[ Html.form [HE.onSubmit (Submit model.input)]
[ Html.input [HA.placeholder "Enter some text.", HA.value model.input, HE.onInput Change] []
, model.responses |> List.map li |> Html.ol []
]
]
将已编译的echo.js嵌入到echo.html中:
这可以在Linux上的Firefox 60.2.0esr上运行,但尚未在其他平台上进行过测试。
同样,这只是一个最小的示例,以演示如何将WebSockets与Elm 0.19一起使用端口。它不包括关闭WebSocket,错误处理等。但是希望该示例可以帮助您开始朝这个方向发展。预计Elm很快将再次直接支持WebSockets,因此这只是一个临时解决方法。如果您不需要升级到0.19,请考虑使用0.18。
2> 小智..:
websocket
目前正在为Elm 0.19重新设计该软件包,请参阅此问题:
此软件包尚未针对0.19进行更新.我听过很多人说他们需要更多来自这个软件包的功能,所以我宁愿在更新中考虑到这一点,而不仅仅是做同样的事情.我推荐使用端口或0.18,如果你真的需要这个权利这一秒.