ClojureScript:获取 js/window 的哈希图
ClojureScript: Get a Hashmap of js/window
在 ClojureScript 中,我正在尝试将全局 window 对象转换(不是递归,仅是最低级别)到哈希映射中。
通常,如果 js-objects 不是由 Object 构造的,则以下互操作会有所帮助:
(defn jsx->clj [js-o]
(reduce (fn [m v]
(assoc m (keyword v) (aget js-o v)))
{} (.keys js/Object js-o)))
但是,如果我将此应用到 js/window,我会收到错误消息:
#object[TypeError TypeError: Cannot convert a Symbol value to a string]
[...]
有没有人有这方面的经验?
神秘错误不在您的代码中,而是在 repl 尝试输出结果时发生。
Evaluate js/cljs
in the repl to replicate,因为这是罪魁祸首。(def foo (doall (jsx->clj js/window)))
工作顺利,除了现在如果你在 repl 中评估 (pr foo)
或者只是foo
本身。
有一个ClojureScript库,dom-types,可以很好的解决这类问题。在您的 ClojureScript 中包含 lambdaisland.dom-types 之后,您可以获得各种内置类型的 print 和 pprint 处理程序。这种方式不是打印 #object[HTMLElement]
你会得到 #js/Element [:div "hello"]
.
使用这个库后,我们可以看到(prn js/window)
显示不同的结果。
演示:
在 ClojureScript 中,我正在尝试将全局 window 对象转换(不是递归,仅是最低级别)到哈希映射中。
通常,如果 js-objects 不是由 Object 构造的,则以下互操作会有所帮助:
(defn jsx->clj [js-o]
(reduce (fn [m v]
(assoc m (keyword v) (aget js-o v)))
{} (.keys js/Object js-o)))
但是,如果我将此应用到 js/window,我会收到错误消息:
#object[TypeError TypeError: Cannot convert a Symbol value to a string]
[...]
有没有人有这方面的经验?
神秘错误不在您的代码中,而是在 repl 尝试输出结果时发生。
Evaluate js/cljs
in the repl to replicate,因为这是罪魁祸首。(def foo (doall (jsx->clj js/window)))
工作顺利,除了现在如果你在 repl 中评估 (pr foo)
或者只是foo
本身。
有一个ClojureScript库,dom-types,可以很好的解决这类问题。在您的 ClojureScript 中包含 lambdaisland.dom-types 之后,您可以获得各种内置类型的 print 和 pprint 处理程序。这种方式不是打印 #object[HTMLElement]
你会得到 #js/Element [:div "hello"]
.
使用这个库后,我们可以看到(prn js/window)
显示不同的结果。
演示: