如何在不发出ajax请求的情况下将edn从clojure传递给clojurescript(即通过打嗝生成的页面)

ndr*_*drw 5 clojure hiccup clojurescript edn

我正在用clojure和clojurescript开发RIA.后端使用打嗝生成一个结果html,如

(html5 
[:head 
  (include-js "/js/my-cljs-generated.js")]
[:body ... ])
Run Code Online (Sandbox Code Playgroud)

如何在生成的html中将edn(hashmap,vector等)传递给clojurescript,即不进行ajax调用?

我想让打嗝做这样的事情:

(include-edn 
   "var_name" {:foo :bar}) ; or any other clojure data
Run Code Online (Sandbox Code Playgroud)

并且能够以某种方式从cljs访问传递的edn(例如,通过名称).

目前我的实现有点hacky并且存储在全局js var中

(hiccup/javascript-tag (str "var edn = \""
                       (pr-str my-clojure-data) "\";"))        
Run Code Online (Sandbox Code Playgroud)

在cljs方面确实如此

(jayq/document-ready 
  (fn []
    (if-let [edn (.-edn js/window)]
      (do-something-with (cljs.reader/read-string edn))
    )
    ...
)
Run Code Online (Sandbox Code Playgroud)

也许有更多惯用的方法来实现这一目标?

vem*_*emv 1

你的“实施”完全没问题。如果让您感觉更舒服,请将其包装在函数中:)

如果您改为发出例如已编译的 ClojureScript ,那不会有什么不同;该值仍然是全局的且可变的。