clojurescript - om - ajax 调用后数据未更新

标签 clojurescript om

我有以下代码,我认为我做了一些根本错误的事情。

(defn world-view [data owner opts]
  (reify
    om/IInitState
      (init-state [_]
        (om/update! data #(assoc % :world vec)))
    om/IWillMount
      (will-mount [_]
        (go (let [world (<! (get-world (:dimensions opts)))]
              (log (get-in world [9 9]))
              (om/update! data #(assoc % :world world)))))
    om/IRender
      (render [this]
        (log (get :world data))
        (apply dom/table nil
          (om/build-all row (:world data))))))

我正在 om/IWillMount 中进行远程 ajax 调用,如下所示:

om/IWillMount
  (will-mount [_]
    (go (let [world (<! (get-world (:dimensions opts)))]
          (log (get-in world [9 9]))
          (om/update! data #(assoc % :world world)))))

我期待从远程调用返回一个二维向量,这是有效的,因为我可以使用

记录数组的元素
(log (get-in world [9 9]))

然后我使用 om/update 来更新数据结构。

但是当调用渲染时,数据似乎没有更新,我可以通过尝试记录数据结构来测试这一点

log (get :world data))

这不会记录任何内容。

我看不出我做错了什么或者为什么数据结构没有更新。

最佳答案

om/update!将光标设置为给定值,因此您基本上是在为光标分配一个函数。我相信你应该使用om/transact!相反。

关于clojurescript - om - ajax 调用后数据未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24040522/

相关文章:

clojure - 如何在ClojureScript/core.async中停止go block ?

reactjs - Om 但在 javascript 中

Clojurescript 交换!和多个关联

clojure - 为组件数据中缺少的键设置初始状态

drag-and-drop - 在嵌入式SVG中拖放事件?

javascript - 从 JavaScript 中删除的 ClojureScript 模拟是什么?

onchange - 在 ClojureScript/Reagent 中绑定(bind)更改

clojure - 创建一个有限惰性序列

clojure - Om Next 的 query->ast 和 ast->query 函数