11

以下代码段不起作用

     headerElement (goog.dom/createDom
                    "div" (.strobj {"style" "background-color:#EEE"})
                    (:title note))

原因:

{ ... } 创建一个 Clojurescript 映射。我需要一个 javascript 对象/哈希。

问题:

我如何进行这种微不足道的转换?

4

3 回答 3

13

您还可以使用#js阅读器文字来创建 JavaScript 对象或数组。

你可以写:

(def test1 #js {:foo 1 :bar false})

它创建了 JavaScript 代码:

namespace.test1 = {"bar":false, "foo":1};

对于数组:

(def test2 #js [1 2 3 false nil true])

创建:

namespace.test2 = [1, 2, 3, false, null, true];

您还可以使用clj->js功能:

(clj->js :style "background-color:#EEE")

它的好处是它可以递归地工作 - 转换嵌套的数据结构。

我发了一篇关于它的帖子(如果我可以为自己做广告)

于 2014-08-28T07:27:38.007 回答
3

cljs.core/js-obj 应该对此有所帮助。请注意,它需要普通的数组/列表(不是地图)。

headerElement (goog.dom/createDom
               "div" (js-obj "style" "background-color:#EEE")
               (:title note))
于 2012-06-14T21:54:00.253 回答
1

这个宏可以让你使用js-obj关键字:

(defmacro obj [& key-values]
(let [obj-def (apply concat (map #(list (name (first %)) (last %))
     (partition 2 key-values)))]
    `(cljs.core/js-obj ~@obj-def)
))

用法

(obj 
    :key someVal
    :otherKey (fn [a b] a)
)
于 2013-02-07T02:00:07.867 回答