以下代码:
(set! (.. e -target -dataset -some-field) "some-value")
被编译为:
return a.target.dataset.Qh=Yf(b)
some_field
被压缩为Qh
。我需要准确地是some_field
。
我知道这是由于压缩优化。但是有没有办法暗示或绕过这种行为呢?
PS:simple
优化可以提供所需的输出
return a.target.dataset.some_field=cljs.core.name.call(null,b)}
答案 0 :(得分:2)
您可能还对cljs-oops
库感兴趣:https://github.com/binaryage/cljs-oops
那么你可以说:
(oset! el "innerHTML" "Hi!")
下面有更多示例,还有on the CLJS Cheatsheet:
答案 1 :(得分:1)
问题是some-field
(或者是some_field
还是someField
?)简化为Qh
。这是因为编译器不知道dataset
对象具有some-field
属性。
一种解决方案是编写extern files,以便Google Closure编译器将知道不得重命名给定字段。
另一种解决方案是使用aset function或调用goog.object.set function。这样,您可以使用字符串值引用对象的字段,并且不会简化字符串值。
第二个示例:
cljs.user=> (def a (clj->js {"a" 1}))
#'cljs.user/a
cljs.user=> a
#js {:a 1}
cljs.user=> (aset a "b" 2)
2
cljs.user=> a
#js {:a 1, :b 2}