2017-01-16 16 views
3

有沒有一種方法可以在Elm中定義沒有參數的訂閱端口?elm:定義沒有參數的訂閱端口

喜歡的東西:

port updateTime :() -> Sub msg 

有了這個代碼,我理解的 「端口 '錄入' 的類型無效」

隨着代碼的錯誤:

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

它正在工作,但我不需要從JavaScript函數向Elm發送任何內容。

回答

7

你可以得到的最接近的可能是這樣的:創建一個類似的例子,但與第一參數(() -> msg)端口:假設你有一個UpdateTimeMsg不接受任何參數

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

type Msg 
    = ... 
    | UpdateTime 

然後,您可以扎入updateTime訂閱像這樣:

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

現在,在JavaScript方面,你必須通過null作爲唯一的參數。

app.ports.updateTime.send(null); 
+0

This Works。但我想知道爲什麼在官方網站上沒有關於這方面的文檔?我一直在尋找https://guide.elm-lang.org/interop/javascript.html#ports,但在那裏我找不到如何完成我的任務(總是沒有提及)......並且它吮...沒有關於ELM和不完整的文檔的書... –

+0

是的,它很糟糕,這是沒有記錄 - 我不得不閱讀本土以瞭解如何被稱爲。如果你不確定,你可以嘗試跳入運行時的內核。注意:Elm不是ELM。 – toastal