om - les données ne sont pas mises à jour après un appel ajax
-
21-12-2019 - |
Question
J'ai le code suivant et je pense que je fais quelque chose de fondamentalement faux.
(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))))))
Je passe un appel ajax à distance om/IWillMount
comme ça:
om/IWillMount
(will-mount [_]
(go (let [world (<! (get-world (:dimensions opts)))]
(log (get-in world [9 9]))
(om/update! data #(assoc % :world world)))))
J'attends un retour de vecteur 2D de l'appel à distance et cela fonctionne car je peux enregistrer des éléments du tableau avec
(log (get-in world [9 9]))
J'utilise alors om/update
pour mettre à jour la structure des données.
Mais lorsque le rendu est appelé, les données ne semblent pas mises à jour, je peux tester cela en essayant d'enregistrer la structure des données
log (get :world data))
Cela n'enregistre rien.
Je ne vois pas ce que je fais de mal ni pourquoi la structure des données n'a pas été mise à jour.
La solution
om/update!
définit le curseur sur la valeur donnée, vous attribuez donc essentiellement une fonction à votre curseur.Je crois que tu devrais utiliser om/transact!
plutôt.