我正在尝试将clojurescript映射传递给Webworker。
在通过之前,它的类型为PersistentArrayMap
。
cljs.core.PersistentArrayMap {meta: null, cnt: 3, arr: Array(6), __hash: null, cljs$lang$protocol_mask$partition0$: 16647951…}
但是,当涉及到工作人员时,它只是一个普通的旧对象
Object {meta: null, cnt: 3, arr: Array(6), __hash: null, cljs$lang$protocol_mask$partition0$: 16647951…}
数据看似完整。此时,我想将其转回PersistentArrayMap
,以便可以在cljs中再次使用它。
使用clj->js
和js->clj
并不能真正起作用,因为它不能区分关键字和字符串,因此会丢失一些数据。
处理这种情况的最佳方法是什么?我可能会以完全错误的方式进行此操作。
答案 0 :(得分:1)
您在代码中使用了public static void ChildFromClosed()
{
//Inform here
MessageBox.Show("Child form is closed!");
}
吗?
private void frmChild_FormClosed(object sender, FormClosedEventArgs e)
{
//calling the static method in Parents form
frmParent.ChildFromClosed();
}
完整文档is here。
答案 1 :(得分:1)
内置解决方案是将数据序列化到EDN并读回。 clj->js
本质上是有损的,应该避免。
首先将对象转换为字符串,然后将其发送给工作人员。
(pr-str {:a 1})
;; => "{:a 1}"
在工作程序中,您通过cljs.reader/read-string
读回它
(cljs.reader/read-string "{:a 1}")
;; => {:a 1}
这通常足够好,但是transit-cljs
库会稍快一些。根据您计划发送的数据量,可能值得额外的依赖。