From 21d42e93279a752c6c96b05193d7d3ab4481bfe2 Mon Sep 17 00:00:00 2001 From: Matt Kocubinski Date: Tue, 18 Nov 2014 16:50:34 -0500 Subject: [PATCH] Resolve different attribute setters when binding elements. --- src/clojure/freactive/dom.cljs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/clojure/freactive/dom.cljs b/src/clojure/freactive/dom.cljs index 0ef9fc6..9c4014a 100644 --- a/src/clojure/freactive/dom.cljs +++ b/src/clojure/freactive/dom.cljs @@ -305,6 +305,18 @@ attr-value node-state) (set-fn element attr-name attr-value))) +(defn get-attr-setter [element attr-name] + (cond + (identical? "data-state" attr-name) + set-data-state! + + (and (identical? (. element -type) "checkbox") (identical? attr-name "checked")) + (fn [node attr-name attr-value] + (set! (. node -checked) (true? attr-value))) + + :default + set-attr!)) + (defn bind-attr! [element attr-name attr-value node-state] (let [attr-name (name attr-name)] (cond @@ -314,14 +326,12 @@ (doseq [[p v] attr-value] (bind-style-prop! element p v node-state))) - (identical? "data-state" attr-name) - (bind-prop-attr! set-data-state! element attr-name attr-value node-state) - (identical? 0 (.indexOf attr-name "on-")) (listen! element (.substring attr-name 3) attr-value) :default - (bind-prop-attr! set-attr! element attr-name attr-value node-state)))) + (bind-prop-attr! (get-attr-setter element attr-name) + element attr-name attr-value node-state)))) (defn- unbind-attr!* [node-state prefix attr-name] (let [attr-key (str "-" prefix attr-name)]