加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在不发出ajax请求的情况下将edn从clojure传递给clojurescrip

发布时间:2020-12-15 22:52:35 所属栏目:百科 来源:网络整理
导读:我正在用clojure和clojurescript开发RIA.后端使用打嗝生成一个结果html,如 (html5 [:head (include-js "/js/my-cljs-generated.js")][:body ... ]) 如何在生成的html中将edn(hashmap,vector等)传递给clojurescript,即不进行ajax调用? 我想让打嗝做这样的事
我正在用clojure和clojurescript开发RIA.后端使用打嗝生成一个结果html,如
(html5 
[:head 
  (include-js "/js/my-cljs-generated.js")]
[:body ... ])

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

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

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

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

目前我的实现有点hacky并且存储在全局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)))

虽然,再次,你的方法很好.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读