1
我有一個正常的查看功能view : Model -> Html Msg
。榆樹取得Html從不
現在我需要從該視圖產品Html Never
,它只是刪除所有的事件處理程序。
我的第一個想法是使用Html.map
功能Msg -> Never
,但我不知道如何定義它,因爲Never
沒有值。
有沒有一個把戲這個工作?
我有一個正常的查看功能view : Model -> Html Msg
。榆樹取得Html從不
現在我需要從該視圖產品Html Never
,它只是刪除所有的事件處理程序。
我的第一個想法是使用Html.map
功能Msg -> Never
,但我不知道如何定義它,因爲Never
沒有值。
有沒有一個把戲這個工作?
Html Never
將是一個沒有任何事件處理程序的視圖。如果您想將此視圖映射到Html Msg
類型,則可以使用Html.map never
。函數never
在core.Basics中定義。
我實際上建議在不使用事件處理程序的情況下爲您的視圖使用泛型類型,例如Html x
,然後您不必進行任何映射。
將'Html Msg'投射到'Html Never'中會打開一個窗口,讓HTML Node有可能損壞的事件偵聽器,這是一個壞主意(內存泄漏或意外行爲)。您必須編寫一個本地函數來檢查節點事實(事件偵聽器)並將它們從虛擬DOM節點的JavaScript表示中移除,所以這實際上「起作用」並刪除了節點的所有「Msg」。 ** TL; DR:**你想要的是一個危險的想法,榆樹不允許這樣做。你能否分享更多關於最終目標的細節? – halfzebra
謝謝@halfzebra。我必須讚歎我沒有完全理解你的評論...無論如何,我正在嘗試使用https://github.com/rupertlssmith/elm-server-side-renderer打印一個字符串,其中包含我的視圖的初始渲染版本;該圖書館始終使用「永不Html」。我想要一種方法將我的'Html Msg'轉換爲'Html Never',以便它可以在那裏使用。 – marcosh
我假設您想要重新使用您的服務器端呈現的一些前端代碼。據我所知,Elm的服務器端渲染僅作爲實驗存在(現在)。在服務器端使用'Html Msg'簽名的意見有點奇怪,因爲它們不應該發出任何事件。 – halfzebra