2017-02-02 25 views
1

我有一个正常的查看功能view : Model -> Html Msg榆树取得Html从不

现在我需要从该视图产品Html Never,它只是删除所有的事件处理程序。

我的第一个想法是使用Html.map功能Msg -> Never,但我不知道如何定义它,因为Never没有值。

有没有一个把戏这个工作?

+4

将'Html Msg'投射到'Html Never'中会打开一个窗口,让HTML Node有可能损坏的事件侦听器,这是一个坏主意(内存泄漏或意外行为)。您必须编写一个本地函数来检查节点事实(事件侦听器)并将它们从虚拟DOM节点的JavaScript表示中移除,所以这实际上“起作用”并删除了节点的所有“Msg”。 ** TL; DR:**你想要的是一个危险的想法,榆树不允许这样做。你能否分享更多关于最终目标的细节? – halfzebra

+0

谢谢@halfzebra。我必须赞叹我没有完全理解你的评论...无论如何,我正在尝试使用https://github.com/rupertlssmith/elm-server-side-renderer打印一个字符串,其中包含我的视图的初始渲染版本;该图书馆始终使用“永不Html”。我想要一种方法将我的'Html Msg'转换为'Html Never',以便它可以在那里使用。 – marcosh

+0

我假设您想要重新使用您的服务器端呈现的一些前端代码。据我所知,Elm的服务器端渲染仅作为实验存在(现在)。在服务器端使用'Html Msg'签名的意见有点奇怪,因为它们不应该发出任何事件。 – halfzebra

回答

0

Html Never将是一个没有任何事件处理程序的视图。如果您想将此视图映射到Html Msg类型,则可以使用Html.map never。函数never在core.Basics中定义。

我实际上建议在不使用事件处理程序的情况下为您的视图使用泛型类型,例如Html x,然后您不必进行任何映射。