gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:42:17 26 4
gpt4 key购买 nike

我正在使用 clojure 和 clojurescript 开发 RIA。后端使用 hiccup 生成结果 html,例如

(html5 
[:head
(include-js "/js/my-cljs-generated.js")]
[:body ... ])

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

我想让 hiccup 做这样的事情:

(include-edn 
"var_name" {:foo :bar}) ; or any other clojure data

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

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

(hiccup/javascript-tag (str "var edn = \""
(pr-str my-clojure-data) "\";"))

在 cljs 方面,类似

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

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

最佳答案

你的方法很好。如果您担心手动创建 JavaScript 代码,另一种方法是将 pr-str 的结果作为数据放入定义良好的元素中。大致如下:

[:div {:style {:display "hidden"}
:id "server-originated-data"
:data-var-1 (pr-str var-1)
:data-var-2 (pr-str var-2)}]

然后您可以使用以下内容从 ClojureScript 获取该数据:

(defn get-data
[tag]
(-> (.getElementById js/document "server-originated-data")
(.getAttribute (str "data-" tag))
(cljs.reader/read-string)))

尽管如此,你的方法还是不错的。

关于clojure - 如何在不发出ajax请求的情况下将edn从clojure传递到clojurescript(即通过hiccup生成的页面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15423136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com