Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用clojurescript部分更改词典_Clojurescript - Fatal编程技术网

使用clojurescript部分更改词典

使用clojurescript部分更改词典,clojurescript,Clojurescript,我尝试用clojurescript编写d3.js的代码,因为我想使用re-frame框架 但是我找不到任何解决方案,因为它有一个改变字典中值的过程,比如函数#collapse 我有个问题。 ClojureScript可以在字典中写入变化的值吗 前 ;;在clojurescript中。。。我没有办法。。。 如上所述,如果您尝试使用可变数据(用于D3)和不可变数据(用于重新帧),则以后可能会遇到问题 在可能的情况下,使用ClojureScript自己的数据结构,并且在使用库进行操作时只传递JavaS

我尝试用clojurescript编写d3.js的代码,因为我想使用re-frame框架

但是我找不到任何解决方案,因为它有一个改变字典中值的过程,比如函数#collapse

我有个问题。 ClojureScript可以在字典中写入变化的值吗

;;在clojurescript中。。。我没有办法。。。

如上所述,如果您尝试使用可变数据(用于D3)和不可变数据(用于重新帧),则以后可能会遇到问题

在可能的情况下,使用ClojureScript自己的数据结构,并且在使用库进行操作时只传递JavaScript对象,例如,您可以使用
(clj->js my map)
来传递

如果您想使用JS互操作来改变JavaScript对象,也可以:

(def家族树
(clj->js)
{
“姓名”“约翰”,
“儿童”[
{“名字”“杰克”,
“儿童”[
{“name”“Michel”}]},
{“姓名”“艾米丽”,
“儿童”[
{“name”“Mike”}]}]
}))
;; 检查族树是否与预期的相似:
user=>家族树
#js{:name“John”,
:children#js[#js{:name“Jack”,
:children#js[#js{:name“Michel”}]}
#js{:name“Emily”,
:children#js[#js{:name“Mike”}]}
;; 使用互操作定义删除子项和插孔:
(定义删除子项[elem]
(套装!(-儿童元素)无)
(def杰克
(->家谱-子对象(获取0)))
;; 测试它们
cljs.user=>(移除子接口)
无
user=>家族树
#js{:name“John”,

:children#js[#js{:name“Jack”,:children nil};如上所述,如果您尝试使用可变数据(对于D3)和不可变数据(对于重帧),则以后可能会遇到问题

在可能的情况下,使用ClojureScript自己的数据结构,并且在使用库进行操作时只传递JavaScript对象,例如,您可以使用
(clj->js my map)
来传递

如果您想使用JS互操作来改变JavaScript对象,也可以:

(def家族树
(clj->js)
{
“姓名”“约翰”,
“儿童”[
{“名字”“杰克”,
“儿童”[
{“name”“Michel”}]},
{“姓名”“艾米丽”,
“儿童”[
{“name”“Mike”}]}]
}))
;;检查族谱是否与预期相符:
user=>家族树
#js{:name“John”,
:children#js[#js{:name“Jack”,
:children#js[#js{:name“Michel”}]}
#js{:name“Emily”,
:children#js[#js{:name“Mike”}]}
;定义使用互操作删除子项和插孔:
(定义删除子项[elem]
(套装!(-儿童元素)无)
(def杰克
(->家谱-子对象(获取0)))
测试他们
cljs.user=>(移除子接口)
无
user=>家族树
#js{:name“John”,

:children#js[#js{:name“Jack”,:children nil};你到底想实现什么?如果你试图模拟
删除子对象
,你会让函数返回一个新的映射,同时删除子对象。
dissoc d:children
。如果你需要可变性,请将映射封装在
原子
中。最大的问题是函数“崩溃”将在该d3.js代码中的任何时候用作与任何子级关联的单击事件。它无法返回到源父级,因此我认为不可变数据不再可用。您到底想实现什么?如果您试图模拟
删除子级
,则函数将返回一个带有子级remo的新映射ved.
dissoc d:children
。如果您需要可变性,请将映射包装在一个
atom
中。最大的问题是函数“collapse”将在d3.js的代码中的任何一点作为与任何子级关联的单击事件使用。它无法返回到源父级,因此我认为不可变的数据不再可用。
function remove_children (d) {
   if (d.children) {
     d.children = null;
   }
}

family_tree = {
  name: "John",
  children: [
     { name: "Jack",
       children: [
          { name: "Michel"}]},
     { name: "Emily",
       children: [
          { name: "Mike"}]}]
};

jack = family_tree.children[0]
remove_children(jack)