2014-12-07 39 views
1

試圖更新光標時,我看到了以下錯誤: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 /事務處理!叫我看到上面的錯誤。

回答

1

你想打電話給你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

1

變化

(let [foo (->> comments)] 

(let [foo (comments)] 

,並保持它的簡單。 ->>運營商不需要。

相關問題