Wie man eine bedingte Liste der Menüeinzelteile in Clojure's Hiccup ähnlichen Datenstrukturen elegant darstellt? Meine Vorlagenfunktion endet mit Aufrufen nach into
und liest nicht natürlich.Wie man Hiccup-Datenstrukturen in Clojure konditional abruft
Wunschergebnis:
[:div.menu
[:div.item "Home"]
[:div.item "Private"]
[:div.item "Private"]
[:div.item "Public"]
Wenn ich die private Elemente in einem if
setzen, ich muss noch den zurückgegebenen Vektor entrollen, oder befassen sich mit nil
, so dass dies nicht funktioniert:
[:div.menu
[:div.item "Home"]
(if authenticated?
[[:div.item "Private"]
[:div.item "Private"]])
[:div.item "Public"]]
Ich fand, ich kann (into [:div.menu] ...)
verwenden und in einer Liste von Elementen übergeben, aber es ist unhandlich und liest nicht natürlich. Ich endete mit diesem Ausdruck:
(-> [:div.menu
[:div.item "Home"]]
(into (if (auth/authenticated?)
[[:div.item "Private"]
[:div.item "Private"]]
(into [[:div.item "Public"]]))
Gibt es einen besseren Weg?
Der Nachteil bei diesem Ansatz ist, dass, wenn Sie mit Reagenz oder eine reaktionsbasierte Bibliothek erhalten Sie eindeutige Schlüsselwarnungen. –