9

有没有办法在 Elm 中定义没有参数的订阅端口?

就像是:

port updateTime : () -> Sub msg

使用此代码,我收到“端口'updateTime'的类型无效”的错误

使用代码:

port updateTime : (String -> msg) -> Sub msg

它正在工作,但我不需要从 javascript 函数向 Elm 发送任何内容。

4

1 回答 1

13

您可以获得的最接近的可能是这样的:创建类似于您的示例的端口,但第一个参数为(() -> msg)

port updateTime : (() -> msg) -> Sub msg

假设你有一个UpdateTime Msg不接受任何参数的,

type Msg
    = ...
    | UpdateTime

然后,您可以updateTime像这样绑定订阅:

subscriptions : Model -> Sub Msg
subscriptions model =
    updateTime (always UpdateTime)

现在,在 javascript 方面,您必须null作为唯一参数传递。

app.ports.updateTime.send(null);

榆树 0.19 更新

在 Elm 0.19 中,您必须明确哪些 Elm 模块暴露了端口,因此您可能必须更新模块定义以包含port module.

port module Main exposing (main)
于 2017-01-16T15:20:49.450 回答