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

Events 如何通过clojurescript通道传输html dom事件,events,dom,asynchronous,clojurescript,Events,Dom,Asynchronous,Clojurescript,我正在将事件系统与集成,它使用async/chan传输事件。然而,事实证明html DOM事件无法通过clojurescript的异步通道传输。已传输事件中的属性变为null,内部函数丢失 首先定义通道: (def event-bus (chan)) 设置dom节点并将回调函数附加到keydown事件。在函数中,将put the dom事件添加到通道中(PS:我用作UI) 等待接收已传输的事件 (go-loop [] (let [e (<! event-bus)] (wh

我正在将事件系统与集成,它使用async/chan传输事件。然而,事实证明html DOM事件无法通过clojurescript的异步通道传输。已传输事件中的属性变为null,内部函数丢失

首先定义通道:

(def event-bus (chan))
设置dom节点并将回调函数附加到keydown事件。在函数中,将put the dom事件添加到通道中(PS:我用作UI)

等待接收已传输的事件

(go-loop
  []
  (let [e (<! event-bus)]
    (when e
      (println "go-loop received" (.stringify js/JSON e))
      (recur))))
所有属性都为null,并且缺少preventDefault等内部函数


我想一定有什么我不明白的。有人有什么想法来修复它吗?如果您能就这个问题给出一些提示/提示或其他想法,那就太好了

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

尝试提取感兴趣的信息(即按下了哪个键)并将其作为值传递给频道


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

是的,传递有趣的部分是一种解决方案,但我想要的是function preventDefault,需要在transer之后调用它。Stringify只是为了调试。有什么想法吗?我试了半个小时在频道的接收端操纵这个事件。什么都没有。我的推测是:事件对象在收到之前就被删除了。我可以传递各种内容,但如果它们包含对事件对象的引用(如此),则它们不起作用。如果您认为有帮助,我可以将失败的repo上载到github。以运行chestnut模板的方式运行它(在自述文件中有解释),我需要的只是在收到的函数中调用preventDefault(),对于这种情况,您是否有一些想法来实现它而不通过整个事件的渠道?
(go-loop
  []
  (let [e (<! event-bus)]
    (when e
      (println "go-loop received" (.stringify js/JSON e))
      (recur))))
go-loop received {"dispatchConfig":null,
                  "dispatchMarker":null,
                  "nativeEvent":null,
                  "type":null,
                  ...
                  "_dispatchListeners":null,"_dispatchIDs":null}