سؤال

لدي الكود التالي وأعتقد أنني أفعل شيئا خاطئا بشكل أساسي.

(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))))))

أنا إجراء مكالمة اياكس عن بعد في 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)))))

أنا أتوقع ناقلات د 2 مرة أخرى من المكالمة عن بعد وهذا يعمل لأنني يمكن تسجيل عناصر المصفوفة مع

(log (get-in world [9 9]))

أنا ثم باستخدام om/update لتحديث بنية البيانات.

ولكن عندما يتم استدعاء العرض ، لا يبدو أن البيانات يتم تحديثها ، يمكنني اختبار ذلك من خلال محاولة تسجيل بنية البيانات

log (get :world data))

هذا لا يسجل شيئا.

لا أستطيع أن أرى ما أفعله خطأ أو لماذا لم يتم تحديث بنية البيانات.

هل كانت مفيدة؟

المحلول

om/update! تعيين المؤشر إلى قيمة معينة ، لذلك كنت في الأساس تعيين وظيفة للمؤشر الخاص بك.أعتقد أنه يجب عليك استخدام om/transact! بدلا من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top