首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将edn从clojure传递到clojurescript而不发出ajax请求(例如,通过hiccup生成的页面)

如何将edn从clojure传递到clojurescript而不发出ajax请求(例如,通过hiccup生成的页面)
EN

Stack Overflow用户
提问于 2013-03-15 09:21:31
回答 3查看 2.1K关注 0票数 5

我正在使用clojure和clojurescript开发RIA。后端使用呃逆生成一个结果html,比如

代码语言:javascript
运行
复制
(html5 
[:head 
  (include-js "/js/my-cljs-generated.js")]
[:body ... ])

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

我想让hiccup做这样的事情:

代码语言:javascript
运行
复制
(include-edn 
   "var_name" {:foo :bar}) ; or any other clojure data

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

目前,我的实现有点老套,将edn存储在全局js变量中。

代码语言:javascript
运行
复制
(hiccup/javascript-tag (str "var edn = \""
                       (pr-str my-clojure-data) "\";"))        

而在cljs方面,smth就像

代码语言:javascript
运行
复制
(jayq/document-ready 
  (fn []
    (if-let [edn (.-edn js/window)]
      (do-something-with (cljs.reader/read-string edn))
    )
    ...
)

也许有更多惯用的方式来实现这一点?

EN

Stack Overflow用户

发布于 2014-09-08 01:06:30

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

代码语言:javascript
运行
复制
[:div {:style {:display "hidden"}
       :id "server-originated-data"
       :data-var-1 (pr-str var-1)
       :data-var-2 (pr-str var-2)}]

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

代码语言:javascript
运行
复制
(defn get-data
  [tag]
  (-> (.getElementById js/document "server-originated-data")
      (.getAttribute (str "data-" tag))
      (cljs.reader/read-string)))

不过,再说一次,您的方法很好。

票数 3
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15423136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档