这似乎应该很简单,我以为是...直到我从运行Figwheel切换到运行JAR文件并停止工作。
这个问题可以简化为一个简单的例子:
使用Leiningen的“试剂”模板制作一个名为“ buttontest”的新应用。
在“ ns”声明的正下方,向core.cljs添加一些脚本:
(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”和“ lein figwheel”。浏览到该站点。单击“问好”按钮将触发警报。
回到shell中,执行一个“ lein uberjar”并使用Java运行生成的.JAR文件。浏览到该站点。单击时,“说声你好”按钮将无效。控制台显示“ buttontest未定义。”
我尝试了各种尝试(在“ onclick”属性中添加/删除名称空间限定,手动添加其他.JS文件等),但没有走运。我觉得我缺少明显的东西。
有什么想法吗?谢谢。
答案 0 :(得分:5)
尝试为greet
函数赋予export
元标记:
(defn ^:export greet ...)
我想象:advanced
的编译优化会破坏名称空间/函数的名称,而:export
会禁止这样做(或类似的东西)。