om - dados não são atualizados após chamada ajax
-
21-12-2019 - |
Pergunta
Eu tenho o código a seguir e acho que estou fazendo algo fundamentalmente errado.
(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))))))
Estou fazendo uma chamada remota ajax om/IWillMount
assim:
om/IWillMount
(will-mount [_]
(go (let [world (<! (get-world (:dimensions opts)))]
(log (get-in world [9 9]))
(om/update! data #(assoc % :world world)))))
Estou esperando um vetor 2D de volta da chamada remota e isso funciona porque posso registrar elementos do array com
(log (get-in world [9 9]))
então estou usando om/update
para atualizar a estrutura de dados.
Mas quando render é chamado, os dados não parecem estar atualizados, posso testar isso tentando registrar a estrutura de dados
log (get :world data))
Isso não registra nada.
Não consigo ver o que estou fazendo de errado ou por que a estrutura de dados não foi atualizada.
Solução
om/update!
define o cursor para o valor fornecido, então você basicamente atribui uma função ao seu cursor.Eu acredito que você deveria usar om/transact!
em vez de.