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

Clojure 从调用CLJS函数的CLJ发出Hiccup控件,clojure,clojurescript,leiningen,reagent,Clojure,Clojurescript,Leiningen,Reagent,看起来这应该很简单,我以为。。。直到我从运行Figwheel切换到运行JAR文件,它才停止工作 这个问题可以归结为一个非常简单的例子: 使用Leiningen“试剂”模板制作一个名为“buttontest”的新应用程序 将一些脚本添加到core.cljs中,“ns”声明的正下方: (defn greet [] (js/alert "Hi!")) 在handler.clj中添加一个静态按钮: (defn loading-page [] (html5 (head) [:body {:class

看起来这应该很简单,我以为。。。直到我从运行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”。浏览到该站点。单击“打招呼”按钮将触发警报

回到shell中,执行“leinuberjar”并使用Java运行生成的.JAR文件。浏览到该网站。单击“打招呼”按钮时将不起任何作用。控制台显示“buttontest未定义”

我尝试过各种各样的事情(修补/删除“onclick”属性中的名称空间限定,手动包括其他.JS文件等),但运气不佳。我觉得我错过了一些明显的东西


有什么想法吗?谢谢。

尝试将
导出
元标志赋予您的
问候
功能:

(defn ^:export greet ...)

我想象
:高级
编译优化会破坏名称空间/函数名,而
:导出
禁止这样做(或类似的事情)。

您使用hiccup生成html?“那是什么样子的?”阿兰·汤普森说,“很干净。”。我正在使用REITT,所以我在handler.clj中构建了一个大数据结构来定义我的所有路由。在这个数据结构中,每个路由都有一个处理函数。每个处理程序返回一个映射,其成员是响应页面的标题、会话、其他一些杂项和主体。这个身体可以是试剂挂东西的钩子,但它不一定是。返回一个包含如下成员的地图非常好:body(html5(head)[:body[:h1“Hello,World”]])。这很有效,现在我知道了答案,这很有意义。谢谢