我想为 Om 组件创建一个单击处理函数。我发现的文档和堆栈溢出示例总是像这样声明匿名函数
(defn main-view [_ owner]
(reify
om/IRender
(render [_]
(let [xs (items)]
(dom/div nil
(om/build sub-view {:title "View A"})
(om/build sub-view {:title "View B"})
(dom/button
#js {:onClick
(fn [e] (om/transact! xs #(assoc % 1 {:text "zebra"})))}
"Switch To Zebra!"))))))
我认为在组件内的 jsx/模板区域之外声明 click 函数会更干净,就像在常规 React 中通常所做的那样。有没有办法在组件内的 Om 中做到这一点?我试过这个,但它不起作用,因为 onClick 未定义:
(defn my-component []
(reify
om/IRender
(render [this]
; Using Sablono syntax
(html [:h1 "Here is a heading" {:on-click 'onClick} ]))
onClick
(onClick [this]
; this part never gets executed when you click
(.log js/console "click"))))
如果可能的话,我想避免在组件之外定义一个单独的函数。