如何使用字符串名称调用函数(需要args) - Clojurescript | D3

时间:2018-02-13 23:51:56

标签: d3.js clojurescript

我试图对调用d3对象(set-attr)上的函数(.attr)的函数(node)进行一些重构。我希望能够将对象函数(.attr)与set-attr分离。

但我一直收到此错误Cannot read property 'each' of null

我希望有人在Cljs中有d3互操作经验并且知道可以工作的东西,因为它在常规js对象上工作正常。

有效的功能

(defn set-attr [node [attr settr]]
  (.attr node attr settr))

我认为应该有效(但给我错误)

(defn set-attr [node [attr settr]]
  ((aget node "attr") attr settr))

在常规js对象上正常工作

((aget (clj->js {:foo (fn [x y] (str "hi" x y))}) "foo" ) "ryan" "lol")
;; => "hiryanlol"

1 个答案:

答案 0 :(得分:1)

d3 uses inheritance。因此,您无法将此对象作为纯粹的哈希表进行处理。你必须达到它的原型才能得到你想要的东西,这通常不是一个好主意:这会产生相当脆弱的代码。