Передача элементов управления Hiccup из CLJ, которые вызывают функции CLJS - PullRequest
0 голосов
/ 09 января 2019

Кажется, что это должно быть просто, и я думал, что это было ... пока я не переключился с запуска Figwheel на запуск файла JAR, и он перестал работать.

Проблема может быть сведена к довольно простому примеру:

Создайте новое приложение «buttontest», используя шаблон «Реагент» Leiningen.

Добавьте скрипт в 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». Перейдите на сайт. Кнопка «Скажи привет» вызовет предупреждение при нажатии.

Вернувшись в оболочку, выполните «lein uberjar» и запустите получившийся файл .JAR, используя Java. Перейдите на сайт. Кнопка «Скажи привет» ничего не будет делать при нажатии. Консоль показывает «Тест кнопки не определен».

Я пробовал разные вещи (повозиться с / удалить квалификацию пространства имен в атрибуте "onclick", вручную включая другие файлы .JS и т. Д.) Без удачи. Я чувствую, что упускаю что-то очевидное.

Есть идеи? Спасибо.

1 Ответ

0 голосов
/ 09 января 2019

Попробуйте дать вашей greet метатеге export:

(defn ^:export greet ...)

Я думаю, :advanced оптимизация компиляции искажает пространство имен / имя функции, а :export запрещает это (или что-то в этом роде).

...