我正在尝试理解如何从om.next中的文本框中读取状态。据我所知,我们不再使用core.async。
作为一个小例子,考虑写一个文本框并将其绑定到一个段落元素,这样您输入的文本就会自动出现在屏幕上。
(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)))))这不管用。
input事件时,引用的表达式不会从框中获取文本。app-state读取字符串并强制文本保持不变吗?发布于 2016-05-27 02:10:59
我会让:onChange事件看起来像这样:
:onChange (fn (_)
(let [v (.-value (gdom/getElement "mybox"))]
#(om/transact! this `[(update-text {:mytext ~v})])))在这里,v的值实际上是经过的。但是,om/transact!还需要一个组件或调节器作为其第一个参数传递。这里我传递的是this,它将是根组件。
https://stackoverflow.com/questions/37468213
复制相似问题