DOM操作は基本的にはページを読み込んでからしかできないので、
(def main (goog.dom/getElement "main"))
(def mydiv (goog.dom/createDom "div"))
(goog.dom/appendChild main mydiv)
(defn change-color-mydiv []
(... mydiv)))
これだと失敗する。
イベントにフックしておく。
(defn init []
(def main (goog.dom/getElement "main"))
(def mydiv (goog.dom/createDom "div"))
(goog.dom/appendChild main mydiv)
(defn change-color-mydiv []
(... mydiv)))
(goog.events/listen js/window goog.events.EventType/LOAD init)
def を関数内に書くのはClojure的じゃないが仕方ない。
他にはbodyタグを閉じる直前にscriptタグを書いておくテクニックもある。ちょっとトリッキー。
Wrapping all def into a load event handler - Clojure | Google Groups