om - данные не обновляются после вызова ajax
-
21-12-2019 - |
Вопрос
У меня есть следующий код, и я думаю, что делаю что-то в корне неправильное.
(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))))))
Я выполняю удаленный вызов ajax в om/IWillMount
подобный этому:
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
чтобы обновить структуру данных.
Но когда вызывается рендеринг, данные, похоже, не обновляются, я могу проверить это, попытавшись зарегистрировать структуру данных
log (get :world data))
Это ничего не регистрирует.
Я не вижу, что я делаю неправильно или почему структура данных не была обновлена.
Решение
om/update!
устанавливает курсор на заданное значение, так что вы, по сути, назначаете своему курсору функцию.Я считаю, что вам следует использовать om/transact!
вместо.