问题描述
要说明:我正在提交一个表单,并在试剂中将其定义为[:input {:type "hidden" :name "command" :value @command}]
并具有一个隐藏字段。这样做的一个好处是,我可以使用一条路由来响应一堆命令,只需在处理程序中对该form字段的值使用case语句即可,就像原始的graphql一样。
然后按下各种按钮的点击事件
(fn [e] (.preventDefault e)
(reset! command "some-command-name-here")
(js/setTimeout (fn [] (. js/document (theForm.submit))) 100))
(相关联的打cup中有一个[:form ...]
,带有一个属性:name="theForm"
,此代码打算引用此{}}。
当然,这还不理想。
基本要点:这是使用r/atom
来更新DOM中隐藏字段的值,然后立即提交该字段,因此(这很糟糕!-仅适用于快速破解 )最初需要进行超时才能进行此工作(否则提交会在react有时间进行反应之前发生)。我确实打算研究直接更新dom(即以阻塞方式同步更新),以便消除超时。
但是我有一个更基本的问题:这适用于开发版本,但是在clojurescript生产版本中却出现错误:
Uncaught TypeError: Cannot read property 'submit' of undefined at main-prod.js:650
这似乎是由于在生产版本中重命名了表单的名称,因此上面的回调中的“ theForm”没有与在我的源码中称为“ theForm”的dom节点连接。我尝试了源代码中的“表单”,但这也不起作用。
我需要了解的生产版本中是否有一些重命名?我也尝试过:pseudo-names true and :pretty-print true
,但问题相同。也刚尝试过stable names,但存在相同的问题。
以下内容适用于高级编译,但我仍在找出原因
(. (js/document.getElementById "the-form") submit) ; id="the-form" in hiccup
可以
这不是:
(. js/document (the-form.submit) ; name="the-form" in hiccup
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)