单击列表项试剂clojurescript的处理程序

单击列表项试剂clojurescript的处理程序,clojure,clojurescript,reagent,Clojure,Clojurescript,Reagent,我想为列表中的每个项目添加一个点击处理程序 (defonce selected-department (atom "department!")) (defn sidebar [] [:div#sidebar-wrapper [:ul.sidebar-nav [:li.sidebar-brand [:a {:href "#"} "Departments"]] ;;[:li [:a {:on-click (reset! selected-department "test

我想为列表中的每个项目添加一个点击处理程序

(defonce selected-department (atom "department!"))

(defn sidebar []
  [:div#sidebar-wrapper
   [:ul.sidebar-nav
    [:li.sidebar-brand [:a {:href "#"} "Departments"]]

    ;;[:li [:a {:on-click (reset! selected-department "test!")} "Dairy"]]

    [:li [:a {:href "#"} "Dairy"]]
    [:li [:a {:href "#"} "Deli"]]
    [:li [:a {:href "#"} "Grocery"]]]])
然后,所选部门是我要显示/使用数据的标签

(defn response-box []
  [:div#form_comparison
   [:label#dlabel @selected-department]])

注释掉的代码不起作用。有没有办法让这一切顺利进行

您的示例不起作用,因为您必须在单击时将函数传递给:

[:li [:a {:on-click #(reset! selected-department "test!")} "Dairy"]]
因此,您唯一需要更改的是在(重置)之前添加#

这相当于

 [:li [:a {:on-click (fn [_] (reset! selected-department "test!"))} "Dairy"]]
编辑:

这是我测试过的完整代码,适用于我:

(defonce selected-department (atom "department!"))

(defn sidebar []
  [:div#sidebar-wrapper
   [:ul.sidebar-nav
    [:li.sidebar-brand [:a {:href "#"} "Departments"]]
    [:li [:a {:on-click #(reset! selected-department "Dairy") :href "#"} "Dairy"]]
    [:li [:a {:on-click #(reset! selected-department "Deli") :href "#"} "Deli"]]
    [:li [:a {:on-click #(reset! selected-department "Grocery") :href "#"} "Grocery"]]]
 [:label @selected-department]])

(reagent/render-component [sidebar] (.getElementById js/document "app"))

单击列表中的项目时,底部的标签会更新。

这是有道理的,但我尝试了这两种方法,但都没有成功地将ui中的atom更改为已单击的列表项目。我能够运行它,并且它对我有效。只是为了确保我已编辑了答案并将整个解决方案粘贴到此处。现在,我一定做了一个s有个小错误。谢谢!我还在想通过传递fn0而不是fn1来利用JS impl函数是否合法。