om - данные не обновляются после вызова ajax

StackOverflow https://stackoverflow.com//questions/24040522

  •  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! вместо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top