我有以下代码,我认为我做的事情根本上是错误的。

(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)))))


我期望从远程调用返回2d向量,这行得通,因为我可以使用以下命令记录数组的元素

(log (get-in world [9 9]))


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

但是当调用render时,数据似乎没有更新,我可以通过尝试记录数据结构来进行测试

log (get :world data))


这什么都不记录。

我看不到我在做什么错,或者为什么数据结构没有更新。

最佳答案

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

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

10-11 20:49