从调用 CLJS 函数的 CLJ 发出 Hiccup 控件

Emitting Hiccup controls from CLJ that call CLJS functions

看起来这应该很简单,我认为它是......直到我从 运行ning Figwheel 切换到 运行ning 一个 JAR 文件并且它停止工作。

这个问题可以简化为一个非常简单的例子:

使用 Leiningen "Reagent" 模板制作一个名为 "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,使用 Java 执行 "lein uberjar" 和 运行 生成的 .JAR 文件。浏览到该站点。 "Say Hello" 按钮在单击时不会执行任何操作。控制台显示 "buttontest is undefined."

我尝试了各种方法(修改/删除 "onclick" 属性中的命名空间限定,手动包含其他 .JS 文件等),但都没有成功。我觉得我错过了一些明显的东西。

有什么想法吗?谢谢

尝试为您的 greet 函数提供 export 元标记:

(defn ^:export greet ...)

我想 :advanced 编译优化破坏了 namespace/function 名称,并且 :export 禁止这样做(或类似的东西)。