Передача элементов управления Hiccup из CLJ, которые вызывают функции CLJS

Кажется, что это должно быть просто, и я думал, что это было... пока я не переключился с запуска 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 ответ

Решение

Попробуйте дать свой greet функционировать export мета-флаг:

(defn ^:export greet ...)

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

Другие вопросы по тегам