OM - Dati che non si aggiornano dopo la chiamata Ajax
-
21-12-2019 - |
Domanda
Ho il seguente codice e penso che sto facendo qualcosa di fondamentalmente sbagliato.
(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))))))
.
Sto facendo una chiamata Ajax remota in om/IWillMount
come questo:
om/IWillMount
(will-mount [_]
(go (let [world (<! (get-world (:dimensions opts)))]
(log (get-in world [9 9]))
(om/update! data #(assoc % :world world)))))
.
Mi aspetto un vettore 2D indietro dalla chiamata remota e questo funziona perché posso registrare elementi dell'array con
(log (get-in world [9 9]))
.
Lo sto usando om/update
per aggiornare la struttura dei dati.
Ma quando viene chiamato il rendering, i dati non sembrano essere aggiornati, posso testare questo tentativo di registrare la struttura dei dati
log (get :world data))
.
Non registra nulla.
Non riesco a vedere cosa sto facendo male o perché la struttura dei dati non è stata aggiornata.
Soluzione
om/update!
Imposta il cursore sul valore dato, quindi sei fondamentalmenteAssegnazione di una funzione al cursore.Credo che dovresti usare om/transact!
invece.