Я думаю, вы были очень близки.
Я попробовал следующее: я создал новый проект с Figwheel, используя Leiningen, например: lein new figwheel jq-inter
В новой папке jq-inter
я отредактировал файл в resources/public/index.html
, чтобы иметь более / менее такое же содержимое отрендеренного HTML-файла из JSFiddle. В основном я скопировал источник http://fiddle.jshell.net/z0y0hp8o/6/show/, удалив исходную версию кода JS между строками 64 и 84, и удалил блок JS, используемый для обмена сообщениями, в нижней части файла, который требуется только для самого JSFiddle.
Прямо перед закрывающим тегом </body>
я добавил строку в файл JS, которая будет скомпилирована из ClojureScript:
<script src="js/compiled/jq_inter.js" type="text/javascript"></script>
Теперь я отредактировал файл ClojureScript на src/jq_inter/core.cljs
так, чтобы он выглядел так:
(ns jq-inter.core
(:require ))
(enable-console-print!)
(println "Loaded!")
(defonce $ js/$)
(-> ($ js/document)
(.on "click" ".panel-heading span.clickable"
(fn [e]
(let [$this ($ (-> e .-target))]
;; (js/console.log $this) ;; To check using the inspector
(if-not (.hasClass $this "panel-collapsed")
(do
(-> $this (.parents ".panel") (.find ".specialCollapse") (.slideUp))
(-> $this (.addClass "panel-collapsed"))
(-> $this (.removeClass "glyphicon-chevron-up") (.addClass "glyphicon-chevron-down")))
(do
(-> $this (.parents ".panel") (.find ".specialCollapse") (.slideDown))
(-> $this (.removeClass "panel-collapsed"))
(-> $this (.removeClass "glyphicon-chevron-down") (.addClass "glyphicon-chevron-up")))
)))))
(defn on-js-reload []
;; optionally touch your app-state to force rerendering depending on
;; your application
;; (swap! app-state update-in [:__figwheel_counter] inc)
)
Вы можете начать проект с lein figwheel
. Он загрузит несколько зависимостей и запустит компилятор в фоновом режиме, а затем предоставит файлы из папки resources
. Мне потребовалось несколько попыток, чтобы заставить работать значок шеврона, и, в конце концов, я думаю, что целью щелчка даже был сам тег <i>
, а не <span>
по какой-то причине. YMMV.