OM ClojureScript裁判光标错误尝试使用OM更新向量时/交易

问题描述:

试图更新光标时,我看到了以下错误:OM ClojureScript裁判光标错误尝试使用OM更新向量时/交易

Uncaught Error: No protocol method ITransact.-transact! defined for type function: function comments(){return om.core.ref_cursor.call(null,new cljs.core.Keyword(null,"comments-data","comments-data",1871210833).cljs$core$IFn$_invoke$arity$1(om.core.root_cursor.call(null,cljs_playground.core.app_state))); 

我使用的是裁判光标指向评论在我的应用状态-data向量:现在

(def app-state 
    (atom 
    {:comments-data [{ :author "Commenter 1" :text "comment 1" } 
        { :author "Commenter 2" :text "comment 2" }]})) 

(defn comments [] 
    (om/ref-cursor (:comments-data (om/root-cursor app-state)))) 

,我想更新这个光标,当用户经由在我的输入分量的输入提交的一些数据。我使用(let [foo( - >> comments)]来引用render-state中的游标,我将它传递给一个处理用户提交的函数调用,并且我想简单地向这个向量添加一个项目

(defn handle-submit [e owner {:keys [text]} foo] 
    (om/transact! foo #(concat % {:author "foo" :text "bar"})) 
    (om/set-state! owner :text "")) 

(defn Input 
    [data owner] 
    (reify 
    om/IInitState 
    (init-state [_] 
     {:text nil}) 
    om/IRenderState 
    (render-state [this state] 
    (let [foo (->> comments)] 
     (dom/div nil 
     (dom/input #js 
      { :type "text" 
      :ref "text-field" 
      :value (:text state) 
      :onChange (fn [event] (handle-change event owner state))}) 
     (dom/button #js 
      { :onClick (fn [event] (handle-submit event owner state foo))} "submit")))))) 

然而,当我让OM /事务处理!叫我看到上面的错误。

你想打电话给你comments功能,并使用它的返回值(光标),不要使用函数本身。更改此行:

(let [foo (->> comments)] 

至:

(let [foo (->> (comments))] 

这应该适合你。

+0

嗨@rmunn,首先谢谢。其次,我做了你所建议的改变。我刷新了页面,但现在我看到我的内容没有显示在页面上。我没有看到从编译器输出的任何错误,但我确实看到Uncaught TypeError:无法读取我的控制台中未定义的属性'call'。我创建了一个更新的要点,其中包含我正在执行的演示的所有代码。我认为这是正确的轨道,只是不确定它为什么不能正确显示。 https://gist.github.com/mjw56/25e126f45a29ee58f313 – 2014-12-07 16:36:27

+0

@ user16626 - 我建议问这是一个单独的问题堆栈溢出,因为它似乎是一个不同的问题。但是我的猜测是'(om/build Input((get global:comments-data)this)))'在最后的行是错误的。首先,你有错误的圆括号 - 你得到:comments-data key,然后*用'this'作为参数调用它*几乎肯定不是你想要做的。其次,在'my-app'的任何地方都没有定义'this'。 – rmunn 2014-12-08 05:20:24

+0

@ user16626 - 我即将离开互联网好几天。如果您在使用此代码时遇到更多问题,您应该将[您发布的要点](https://gist.github.com/mjw56/25e126f45a29ee58f313)转换为另一个问题,以便其他人可以帮助解决您的问题。因为如果你再给我写信,我会在12日星期五之前看不到它。 – rmunn 2014-12-08 15:39:52

变化

(let [foo (->> comments)] 

(let [foo (comments)] 

,并保持它的简单。 ->>运营商不需要。