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.

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top