2013-02-24 13 views
5

Mam obiekt o nazwie "user-agent" w obiekcie javascript, który chciałbym uzyskać wartość. Jak mam to zrobić w clojurescript?Jak uzyskać właściwości z myślnikami w ich nazwach w clojurescript?

(js/eval "a = {'user-agent': 'curl/7.22.0'}") 
(js/eval "a['user-agent']") ;=> curl/7.22.0 
(.-user-agent js/a) ;=> (returns nothing) 
(. js/a -user-agent) ;=> (returns nothing) 

Czy to dlatego, że właściwości są pobierane za pomocą notacji kropkowej zamiast nawiasu klamrowego? https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/compiler.clj#L734

Odpowiedz

7

Zastosowanie aget:

(aget js/a "user-agent") 

Kropka notacji nie działa, ponieważ clojurescript kompilator robi jakąś nazwę munging w celu wspierania rozszerzony w celu wspierania znaków takich jak ? i ! w nazwach zmiennych. Między innymi, zmienianie nazw zmienia także kreski na podkreślenia, tak że dostęp do pola, taki jak (.-user-agent js/a), jest kompilowany w coś takiego jak a.user_agent.

Tak długo, jak pozostajesz wewnątrz clojurescript, mungowanie nazw jest przezroczyste i zazwyczaj nie musisz być tego świadomy, chyba że robisz interakcję javascript. W takim przypadku można użyć funkcji interpo, takich jak aget i aset.

Powiązane problemy