2016-05-26 11 views
0

Ich versuche zu verstehen, wie Status aus einem Textfeld in om.next lesen. Wie ich es verstehe, sind wir nicht mehr gebunden/sollen core.async verwenden.Lesen Eingang mit Om Weiter

Als kleines Beispiel sollten Sie in ein Textfeld schreiben und es an ein Absatzelement binden, damit der eingegebene Text automatisch auf dem Bildschirm angezeigt wird.

(def app-state (atom {:input-text "starting text"})) 


(defn read-fn 
    [{:keys [state] :as env} key params] 
    (let [st @state] 
    (if-let [[_ v] (find st key)] 
     {:value v} 
     {:value :not-found}))) 

(defn mutate-fn 
    [{:keys [state] :as env} key {:keys [mytext]}] 
    (if (= 'update-text key) 
    {:value {:keys [:input-text]} 
     :action 
     (fn [] 
     (swap! state assoc :input-text mytext))} 
    {:value :not-found})) 

(defui RootView 
    static om/IQuery 
    (query [_] 
      [:input-text]) 
    Object 
    (render [_] 
      (let [{:keys [input-text]} (om/props _)] 
      (dom/div nil 
         (dom/input 
         #js {:id "mybox" 
          :type "text" 
          :value input-text 
          :onChange #(om/transact! _ '[(update-text {:mytext (.-value (gdom/getElement "mybox"))})]) 
          }) 
         (dom/p nil input-text))))) 

Dies funktioniert nicht.

  1. Wenn in der input Form das onChange Ereignis Brennen, wird der zitierte Ausdruck den Text aus dem Feld nicht greifen.

  2. Die erste Mutation wird ausgelöst und aktualisiert, aber nachfolgende Mutationen werden nicht ausgelöst. Obwohl der Status nicht geändert wird, sollte die Abfrage die Zeichenfolge aus app-state lesen und den Text zwingen, derselbe zu sein?

    Hier ist der Wert v wird durchlaufen tatsächlich:

+0

Wenn Sie ein '(einfaches Anführungszeichen) haben, dann ist alles in der folgenden Form' wie es ist '. Sie müssen ein Backquote und dann eine ~ (Tilde) verwenden. Das Fixieren sollte dann Text aus der Box greifen. –

+0

@ChrisMurphy Okay, ich fühle mich wie ein Idiot und benutze den Backtick und den Fluchtcharakter. Ist dies der geeignete Weg, dieses Verfahren in om next zu strukturieren? –

Antwort

0

würde ich das :onChange Veranstaltung wie diese aussehen. Aber auch om/transact! benötigt entweder eine Komponente oder den Versorger, der als erster Parameter übergeben werden soll. Hier gehe ich in this über, die die Wurzelkomponente sein wird.

Verwandte Themen