2017-02-02 4 views
1

Ich habe eine normale Ansicht Funktion view : Model -> Html Msg.Elm erhalten Html Nie

Jetzt muss ich aus dieser Ansicht Produkt ein Html Never, die entfernt nur alle Event-Handler.

Meine erste Idee war, Html.map mit einer Funktion Msg -> Never zu verwenden, aber ich weiß nicht, wie man es definiert, da Never keine Werte hat.

Gibt es einen Trick, diese Arbeit zu machen?

+4

Casting 'Html Msg' in' Html Never' öffnet sich ein Fenster für die mit möglicherweise gebrochene Ereignis-Listener HTML Knoten, die eine schlechte Idee ist (Speicherleck oder unerwartetes Verhalten). Sie müssen eine native Funktion schreiben, um Knotenfakten (Ereignislistener) zu überprüfen und sie aus der JavaScript-Darstellung von virtuellen DOM-Knoten zu entfernen, so dass dies tatsächlich "funktioniert" und alle "Msg" für die Knoten entfernt. ** TL; DR: ** Was Sie wollen, ist eine gefährliche Idee und Elm erlaubt das nicht aus einem bestimmten Grund. Könnten Sie bitte weitere Einzelheiten zu den Endzielen mitteilen? – halfzebra

+0

Danke @halfzebra. Ich muss zugeben, dass ich Ihren Kommentar nicht vollständig verstanden habe ... Jedenfalls versuche ich, https://github.com/rupertlssmith/elm-server-side-renderer zu verwenden, um eine Zeichenfolge zu drucken, die die ursprünglich gerenderte Version meiner Ansicht enthält ; Die Bibliothek verwendet immer 'Html Never'. Ich wollte eine Möglichkeit, meine 'Html Msg' in eine' Html Never' zu konvertieren, damit sie dort verwendet werden kann. – marcosh

+0

Ich nehme an, dass Sie einige der Front-End-Code für serverseitige Rendering wiederverwenden möchten. Soweit ich weiß, existiert serverseitiges Rendering für Elm nur als Experiment (für den Moment). Ansichten mit 'Html Msg'-Signatur auf der Serverseite zu haben, ist etwas merkwürdig, da sie keine Ereignisse ausgeben sollen. – halfzebra

Antwort

0

Html Never würde eine Ansicht ohne Event-Handler sein. Wenn Sie diese Sicht auf den Typ Html Msg abbilden möchten, können Sie Html.map never verwenden. Die Funktion never ist im core.Basics definiert.

Ich würde eigentlich empfehlen, stattdessen einen generischen Typ für Ihre Ansicht ohne Event-Handler, wie Html x zu verwenden, und dann müssen Sie überhaupt keine Zuordnung vornehmen.