从调用 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
禁止这样做(或类似的东西)。
看起来这应该很简单,我认为它是......直到我从 运行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
禁止这样做(或类似的东西)。