6

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

(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"]]]])

然后 selected-department 是我要显示/使用数据的标签

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

注释掉的代码不起作用。有没有办法使这项工作?

4

1 回答 1

7

您的示例不起作用,因为您必须像这样将函数传递给 :on-click :

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

所以你唯一需要改变的就是在 (reset! ...

它相当于

 [: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"))

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

于 2015-06-23T18:27:15.537 回答