首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在呈现阶段之外操作游标

无法在呈现阶段之外操作游标
EN

Stack Overflow用户
提问于 2014-07-03 08:26:29
回答 2查看 425关注 0票数 5

第一次尝试反应,我想做一个简单的待办事项列表应用程序。但是每次我按enter来触发onSubmit时,它都说是Uncaught Error: Cannot manipulate cursor outside of render phase, only om.core/transact!, om.core/update!, and cljs.core/deref operations allowed。虽然我认为这是一个非常好的错误信息,但我不知道该怎么做。

代码语言:javascript
复制
(ns app.core
  (:require [om.core :as om :include-macros true]
            [sablono.core :as html :refer-macros [html]]))

(def app-state (atom
                {:todos [{:todo "first"}
                         {:todo "second"}]
                 :current ""}))

(defn to-do
  [data]
  (om/component
   (html [:li (:todo data)])))

(defn to-dos
  [data]
  (om/component
   (html [:div
          [:form {:on-submit (fn [e]
                               (.preventDefault e)
                               (om/transact! data :todos (fn [v]
                                                           (js/console.log (:current data))
                                                           (conj v (:current data)))))}
           [:input {:type "text" 
                    :placeholder "Enter some text."
                    :on-change (fn [e] (om/update! data :current (.. e -target -value)))}]]
          [:ul 
          (om/build-all to-do (:todos data))]])))

(om/root to-dos app-state {:target js/document.body})
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-03 12:57:26

我认为问题在于您在om/transact中访问data的位置!在那里您应该对v进行操作

(:current v)而不是(:current data)

或者您可以尝试使用(:current @data)来获取最近的数据值。

票数 4
EN

Stack Overflow用户

发布于 2015-04-19 03:45:24

实际上,有两个问题:

代码语言:javascript
复制
(om/transact! data :todos (fn [v]
  (js/console.log (:current data))
  (conj v (:current data)))))

其中之一就是@edbond上面所说的:您应该使用(:current v)而不是(:current data)。但是,另一个问题是,您指定的是:todos关键字,因此您应该简单地更改data本身,因为:current在应用程序状态下位于:todos之外。因此,正确的表述是:

代码语言:javascript
复制
(om/transact! data (fn [v]
  (js/console.log (:current v))
  (conj v (:current v)))))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24548626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档