如何使用字符串名称调用函数(需要参数)- Clojurescript | d3
How to call a function (requiring args) with string name - Clojurescript | d3
我正在尝试对调用 d3 对象 (node
) 上的函数 (.attr
) 的函数 (set-attr
) 进行一些重构。我希望能够将对象函数 (.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"
d3 uses inheritance。因此,您不能将此对象仅作为散列-table 来处理。你必须接触到它的原型才能得到你想要的东西,这通常不是一个好主意:这会产生相当脆弱的代码。
我正在尝试对调用 d3 对象 (node
) 上的函数 (.attr
) 的函数 (set-attr
) 进行一些重构。我希望能够将对象函数 (.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"
d3 uses inheritance。因此,您不能将此对象仅作为散列-table 来处理。你必须接触到它的原型才能得到你想要的东西,这通常不是一个好主意:这会产生相当脆弱的代码。