Передача элементов управления 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
запрещает это (или что-то подобное).