clojure - 从调用 CLJS 函数的 CLJ 发出 Hiccup 控件
问题描述
看起来这应该很简单,我认为它是......直到我从运行 Figwheel 切换到运行 JAR 文件并且它停止工作。
这个问题可以简化为一个非常简单的例子:
使用 Leiningen“试剂”模板制作一个名为“buttontest”的新应用程序。
在 core.cljs 中添加一些脚本,就在“ns”声明的正下方:
(defn greet [] (js/alert "Hi!"))
在 handler.clj 中添加一个静态按钮:
(defn loading-page [] (html5 (head)
[:body {:class "body-container"} mount-target
;v v v INSERTED THIS
[:button {:onclick "buttontest.core.greet()"} "Say Hello"]
;^ ^ ^
(include-js "/js/app.js")]))
执行“lein cljsbuild once”和“lein figwheel”。浏览网站。单击“Say Hello”按钮将触发警报。
回到 shell,执行“lein uberjar”并使用 Java 运行生成的 .JAR 文件。浏览网站。单击“Say Hello”按钮时不会执行任何操作。控制台显示“buttontest 未定义”。
我已经尝试了各种方法(修补/删除“onclick”属性中的命名空间限定,手动包括其他 .JS 文件等),但没有运气。我觉得我错过了一些明显的东西。
有任何想法吗?谢谢。
解决方案
尝试给你的greet
函数export
元标志:
(defn ^:export greet ...)
我想:advanced
编译优化会破坏命名空间/函数名称,并:export
禁止它(或类似的东西)。
推荐阅读
- javascript - yarn.lock 文件中的完整性属性是什么?
- python - pip 无法安装任意模块
- sql - 编写 Postgres 函数时“执行不存在”
- javascript - 如何从 JAVA 后端共享验证规则(约束)到 JS 前端
- laravel-5 - Laravel - 安装新库 - 删除/降级供应商包
- ios - 定义一个可以在运行时在视图之间切换的故事板
- javascript - 在本地主机上从 JavaScript 向 c# 发送 https 请求
- javascript - 自动滚动不会滚动到元素,损坏的 JS
- c# - 强制类型变量为特定的基类类型
- php - 条件逻辑和自定义 FB 像素集成到 WooCommerce