有没有什么方法可以在Om中制作不使用匿名函数的onClick处理程序?

145

我想为Om组件创建一个单击处理程序函数。我发现的docs和Stack Overflow示例总是声明这样的匿名函数

(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 / template区域之外声明单击函数会更干净,这是常规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"))))

如果可能的话,我想避免在组件外部定义一个单独的函数。

神秘之星

您的问题很明智,与处理数据范围有关。

可能但这种方法存在问题,在大多数情况下,您将需要来自外部代码块的本地范围数据(在您的情况下,这是一个Om组件)。

我会用代码解释。假设您要移出处理函数:

(anything
 (let [a 1 b 2]
   (on-event (fn my-handler [evt] (log (+ a b (.someAttr evt)))))))

您最终会得到更长的结果:

(defn local-data->handler [a b]
  (fn [evt] (log (+ a b (.someAttr evt)))))

(anything
 (let [a 1 b 2]
   (on-event (local-data->handler a b))))

如果您只想在组件定义内移动:

(anything
 (let [a 1
       b 2
       my-handler (fn [evt] (log (+ a b (.someAttr evt))))]
   (on-event my-handler)))

请注意:为了使事件处理程序正常工作,请确保您的非匿名函数(使用defn或let创建)与匿名形式(尤其是参数列表)相同。

onClick是未定义的,因为您像使用Om协议一样使用它。请参考Om生命周期协议以正确使用。

https://github.com/swannodette/om/wiki/文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有什么方法可以使用angular 7创建单个页面应用程序而不使用node和npm,我们可以在脚本标签中添加npm依赖吗?

来自分类Dev

有没有什么简单的方法可以将 python 中的 type() 函数的输出转换为字符串?

来自分类Dev

有没有什么方法可以通过使用元素树从xml文件中创建多个数据框?

来自分类Dev

有没有什么编程的方法可以打破NodeJS中的无限循环?

来自分类Dev

有没有什么简单的方法可以在 R 中创建公式列表

来自分类Dev

有没有什么方法可以在不使用外部库的情况下将数据插入沙发基础版?

来自分类Dev

在 elf binary 中,有没有什么简单的方法可以从偏移量中获取内存地址?

来自分类Dev

有没有什么简单的方法可以在android studio中列出商店?我的代码似乎太长了

来自分类Dev

有没有什么方法可以在 com.ibm.cics.server 中创建单选按钮

来自分类Dev

有没有什么方法可以使用Gradle而不是像Android Studio这样的IDE来构建apk?

来自分类Dev

有没有什么好的方法可以访问用户区域中的结构?

来自分类Dev

有没有什么好的方法可以检测MySQL是否“就绪”?

来自分类Dev

有没有什么短方法可以添加多个项目

来自分类Dev

有没有什么特别的方法可以为 Web 开发设置文件?

来自分类Dev

斯威夫特:有没有什么方法可以让某人在键盘上敲击某个键?

来自分类Dev

有没有什么方法可以在静态 html 站点上实现 Night and Day 模式?

来自分类Dev

有没有什么方便的方法可以获取页面中子部分的索引?

来自分类Dev

有没有什么方法可以模仿 JavaScript 上的拖动事件 for CSS?

来自分类Dev

有没有什么功能可以使MLR中的复杂学习者

来自分类Dev

有没有什么办法可以在ABP框架下的ApplicationInitialization中使用AddSingleton?

来自分类Dev

有没有什么方法可以安装需要.net 3.5而又没有.net 3.5的应用程序?

来自分类Dev

有没有什么简单的方法可以在列表中的列表中添加元素以使列表中的所有列表具有相同数量的元素?

来自分类Dev

有没有一种方法可以从函数中返回抽象而不使用new(出于性能原因)

来自分类Dev

有没有什么标准可以判断一个网站是空白的,没有使用Java的内容?

来自分类Dev

有没有什么有效的方法可以在指定的边界内创建随机列表?

来自分类Dev

有没有什么简单的方法可以获取ubuntu中所有更新的直接下载链接?

来自分类Dev

有没有什么直接的方法可以使用 Rest API 使用其标题获取文档库的服务器相对 URL?

来自分类Dev

有没有什么好方法可以记录哪个PHP脚本通过PHPMailer发送电子邮件?

来自分类Dev

有没有什么方法可以将速度模板与elenium.js集成在一起?

Related 相关文章

  1. 1

    有没有什么方法可以使用angular 7创建单个页面应用程序而不使用node和npm,我们可以在脚本标签中添加npm依赖吗?

  2. 2

    有没有什么简单的方法可以将 python 中的 type() 函数的输出转换为字符串?

  3. 3

    有没有什么方法可以通过使用元素树从xml文件中创建多个数据框?

  4. 4

    有没有什么编程的方法可以打破NodeJS中的无限循环?

  5. 5

    有没有什么简单的方法可以在 R 中创建公式列表

  6. 6

    有没有什么方法可以在不使用外部库的情况下将数据插入沙发基础版?

  7. 7

    在 elf binary 中,有没有什么简单的方法可以从偏移量中获取内存地址?

  8. 8

    有没有什么简单的方法可以在android studio中列出商店?我的代码似乎太长了

  9. 9

    有没有什么方法可以在 com.ibm.cics.server 中创建单选按钮

  10. 10

    有没有什么方法可以使用Gradle而不是像Android Studio这样的IDE来构建apk?

  11. 11

    有没有什么好的方法可以访问用户区域中的结构?

  12. 12

    有没有什么好的方法可以检测MySQL是否“就绪”?

  13. 13

    有没有什么短方法可以添加多个项目

  14. 14

    有没有什么特别的方法可以为 Web 开发设置文件?

  15. 15

    斯威夫特:有没有什么方法可以让某人在键盘上敲击某个键?

  16. 16

    有没有什么方法可以在静态 html 站点上实现 Night and Day 模式?

  17. 17

    有没有什么方便的方法可以获取页面中子部分的索引?

  18. 18

    有没有什么方法可以模仿 JavaScript 上的拖动事件 for CSS?

  19. 19

    有没有什么功能可以使MLR中的复杂学习者

  20. 20

    有没有什么办法可以在ABP框架下的ApplicationInitialization中使用AddSingleton?

  21. 21

    有没有什么方法可以安装需要.net 3.5而又没有.net 3.5的应用程序?

  22. 22

    有没有什么简单的方法可以在列表中的列表中添加元素以使列表中的所有列表具有相同数量的元素?

  23. 23

    有没有一种方法可以从函数中返回抽象而不使用new(出于性能原因)

  24. 24

    有没有什么标准可以判断一个网站是空白的,没有使用Java的内容?

  25. 25

    有没有什么有效的方法可以在指定的边界内创建随机列表?

  26. 26

    有没有什么简单的方法可以获取ubuntu中所有更新的直接下载链接?

  27. 27

    有没有什么直接的方法可以使用 Rest API 使用其标题获取文档库的服务器相对 URL?

  28. 28

    有没有什么好方法可以记录哪个PHP脚本通过PHPMailer发送电子邮件?

  29. 29

    有没有什么方法可以将速度模板与elenium.js集成在一起?

热门标签

归档