Verstecken eines Elements in Clojurescript Dommy
-
23-12-2019 - |
Frage
Ich versuche, ein Element im ClojureScript auszublenden, genauer gesagt das Dommy Bibliothek.Das habe ich bisher bekommen:
ClojureScript:
(ns fucking_about
(:require
[dommy.utils :as utils]
[dommy.core :as dommy])
(:use-macros
[dommy.macros :only [node sel sel1]]))
(map dommy/toggle! (sel :.hide))
HTML:
<html>
<head><title></title></head>
<body>
<ul>
<li class="show">Derp</li>
<li class="hide">Herp</li>
<li class="show">ies!</li>
</ul>
<script type="text/javascript" src="script.js"></script>
</body>
</html>
Aber ich erhalte keine Ergebnisse, wenn ich die Site in einem Browser öffne, und ich habe keine Ahnung, warum :< und ich kann über die Github-Seite hinaus keine Dokumentation zu ClojureScript finden.
Lösung
Die Sache ist, dass map
gibt eine verzögerte Folge von Elementen zurück.Lazy Sequence ist eine Art unrealisiertes Versprechen dessen, was man bekommen kann.Sie möchten, dass Ihre Sequenz einige Nebenwirkungen hervorruft.Damit es funktioniert, müssen Sie es nur erkennen.
Das Problem ist trivial.Sie haben zwei Möglichkeiten:
1) Realisieren Sie Ihre Lazy-Sequenz mit doall
Funktion, etwa so:
(doall (map dommy/toggle! (sel :.hide)))
Das ist genau das Ziel von doall
:Gehen Sie die gesamte Sequenz durch und erzwingen Sie alle möglichen Effekte.
2) Verwendung doseq
was eine Nebenwirkung hervorrufen soll, etwa so:
(doseq [el (sel :.hide)]
(dommy/toggle! el))
Und das ist alles!In beiden Fällen sollten Sie das gleiche Ergebnis erhalten.
Noch Fragen?