2017-12-13 2 views

Antwort

1

Hier ein brauchbarer Ausschnitt aus unserem Projekt ist:

:on-change 
(fn [this] 
    (if (not (= "" (-> this .-target .-value))) 
     (let [^js/File file (-> this .-target .-files (aget 0))] 
      ;; your logic here ... 
      ;; now reset the widget to let user upload a new one 
      (set! (-> this .-target .-value) "")))) 

Hope this helfen würde.

+0

Vielen Dank! –

1

müssen Sie zuerst den Dom-Knoten von irgendwo bekommen. In React world this könnte nicht das Dom sein, da sie syntaktische Ereignisse sind.

:on-change (fn [event] 
      (let [dom (goog.object/get event "target") 
        file (goog.object/getValueByKeys dom #js ["files" 0])])) 

oder mit regulären Interop Formen in ClojureScript:

:on-change (fn [event] 
      (let [files (.. event -target -files) ; returns JS Array 
        file (first files)] 
       (do-something-with file)])) 

https://reactjs.org/docs/handling-events.html

+0

Welcher Namensraum ist "o" Alias ​​gehören? –

+1

goog.object. Sie können auch normale Interop-Formulare wie (.. event -target -files) verwenden. –

+0

Ich finde mit goog.object geben mir weniger Kopfschmerzen, wenn ich im Voraus kompilieren muss. Also benutze ich weiter goog.object für die Handhabung von js Objekt als Gewohnheit. –

2

auf Alberts Antwort zu erweitern (und weil meine Änderungen abgelehnt wurden):

Statt goog.object/get wie unter der Verwendung (und in seiner Antwort mit o/get):

(let [dom (goog.object/get event "target") 
     file (goog.object/getValueByKeys dom #js ["files" 0])])) 

Sie auch regelmäßige Interop verwenden können Formulare in ClojureScript:

:on-change (fn [event] 
      (let [files (.. event -target -files) ; returns JS Array 
        file (first files)] 
       (do-something-with file)])) 
+0

danke das scheint ziemlich geradlinig! –

Verwandte Themen