2015-02-20 3 views
3

Я думал, что это будет довольно прямолинейно, но кажется, что я что-то пропускаю.Найти значение элемента ввода

(ns main.core 
    (:require [dommy.core :refer-macros [sel sel1]])) 

(sel1 :#my-input) => #<[object HTMLInputElement]> 

(.value (sel1 :#my-input)) 
=> #<TypeError: document.querySelector(...).value is not a function> 

ответ

3

В ClojureScript у нас есть две специальные формы для Interop с JavaScript: . и .-.

. следует использовать для вызова методов объектов, а .- следует использовать для доступа к свойствам (включая функции как значение). Если вы посмотрите на source code функции value в библиотеке Dommy, вы увидите, что она использует специальную форму .-.

Посмотрите здесь: https://github.com/clojure/clojurescript/wiki/Differences-from-Clojure#host-interop

Эта шпаргалка также полезно: https://himera.herokuapp.com/index.html

+0

, конечно, гораздо более тонкую оболочку вокруг ', чем я ожидал, value'.. – deadghost

2

В то время как я не 100%, почему .value не работает, следующие работы прекрасно:

(ns main.core 
    (:require [dommy.core :as dommy :refer-macros [sel sel1]])) 

(sel1 :#my-input) => #<[object HTMLInputElement]> 

(dommy/value (sel1 :#my-input)) 
=> "my-input-value" 
Смежные вопросы