首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过clojurescript通道传输html dom事件

如何通过clojurescript通道传输html dom事件
EN

Stack Overflow用户
提问于 2015-01-13 13:05:42
回答 1查看 206关注 0票数 0

我正致力于将事件系统与om-事件总线集成,它使用异步/chan来传输事件。然而,事实证明,html DOM事件未能通过clojurescript的异步通道传输。传输事件中的属性变为空,内部函数丢失。

首先定义一个通道:

代码语言:javascript
复制
(def event-bus (chan))

设置dom节点并将回调函数附加到keydown事件。在函数中,在通道中添加put dom事件(PS:我使用om作为UI)

代码语言:javascript
复制
(dom/section #js {:id "VRE" 
                  :tabIndex 0
                  :onKeyDown  #(put! event-bus %)))

等待接收传递的事件

代码语言:javascript
复制
(go-loop
  []
  (let [e (<! event-bus)]
    (when e
      (println "go-loop received" (.stringify js/JSON e))
      (recur))))

当我键入一些键时,控制台将打印:

代码语言:javascript
复制
go-loop received {"dispatchConfig":null,
                  "dispatchMarker":null,
                  "nativeEvent":null,
                  "type":null,
                  ...
                  "_dispatchListeners":null,"_dispatchIDs":null}

所有属性都为null,并且缺少了内部函数(如preventDefault )。

我想肯定有些东西我还不明白。有谁想办法解决这个问题吗?如果你能对这个问题提供一些提示/建议或其他想法,那就太好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-13 14:17:19

您正在尝试对事件对象进行字符串化。这不是个好主意,看看这个答案:

如何压缩事件对象?

尝试提取有趣的信息(即按下哪个键)并将其作为值传递给通道。

传递整个事件对象并在接收端操作它可能是不可能的。我在猜测,但似乎事件对象在从通道中提取之前就被删除了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27922904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档