Dom enfocus(clojurescript)中的事件处理不起作用

Dom enfocus(clojurescript)中的事件处理不起作用,dom,clojurescript,Dom,Clojurescript,我在ClojuseScript中使用enfocus进行dom操作 我有一个事件处理程序: (ns numeros-linguas.script (:require [enfocus.core :as ef] [enfocus.events :as ev]) (:require-macros [enfocus.macros :as em])) (defn aviso-seleciona [] (ef/at "select" (ev/listen :change

我在ClojuseScript中使用enfocus进行dom操作

我有一个事件处理程序:

(ns numeros-linguas.script
  (:require [enfocus.core :as ef]
            [enfocus.events :as ev])
  (:require-macros [enfocus.macros :as em]))

(defn aviso-seleciona []
  (ef/at "select" (ev/listen :change
                             (fn [evt]
                               (let [lingua-id (ef/from [:select] (ef/get-prop :value))
                                     lingua-selector (str "#" lingua-id)
                                     cores (array "azul" "vermelho" "laranja" "verde")
                                     linguas-visiveis (when-let [r (ef/from [:#resultado :> :div.visivel] (ef/get-attr :id))]
                                                        (-> r
                                                            list
                                                            flatten))]
                                 (ef/at "#resultado" (ef/append (ef/from lingua-selector identity)))
                                 (ef/at lingua-selector (ef/remove-class "invisivel"))
                                 (ef/at lingua-selector (ef/add-class "visivel"))
                                 (map #(do
                                         (ef/at (str "#" %)
                                                (ef/add-class %2))
                                         (map (fn [cor]
                                                (ef/at (str "#" %)
                                                       (ef/remove-class cor)))
                                              (remove #{%2} cores)))
                                      linguas-visiveis cores))))))

(set! (.-onload js/window)
  aviso-seleciona)

棘手的部分在地图上。我想从一些div元素中删除一些css类,并在这些元素中添加一些其他类。但它不起作用。表单中除此之外的所有其他元素都在工作。但是,如果我将表单复制并粘贴到连接到该页面的repl上,并运行代码,它将按预期工作。我试图对代码的部分内容进行注释,以了解发生了什么,但没有希望。

我注意到您在
map
中做了一些副作用,但这不起作用,因为
map
是惰性的,即除非您尝试使用它生成的序列,否则它不会进行计算,这解释了为什么它在REPL中有效,而在浏览器中无效

要获得最快和最脏的修复,请尝试使用
dorun
强制评估序列:
(dorun(map#(do)…

或者,按照习惯用法,将代码重写为类似以下内容(这不是很习惯用法):

(doseq[[el cor to add](映射向量语言visiveis cores)]
(ef/at(str“#”el)
(ef/添加类别cor以添加))
(doseq[cor to remove(remove#{cor}core)]
(ef/at(str“#”el)
(ef/移除类别cor以移除)))
)
或者,从每个元素中删除所有类,首先:

(doseq[el-linguas visiveis
cor cores]
(ef/at(str“#”el)
(ef/移除类别cor)))
以及以后仅添加必需的类:

(doseq[[el-cor](映射向量语言visiveis核心)]
(ef/at(str“#”el)
(ef/添加类别cor)))