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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top