Обновление курсора OM, прошедшего через функцию

При вызове om/build можно отправить опцию fn, которая согласно документации:

  `fn - a function to apply to x before invoking f.`

Мой вопрос: при применении om/transact! или om/update! к курсору (x), которым манипулировал fn, как это влияет на исходный курсор?


person Asher    schedule 09.07.2015    source источник


Ответы (1)


(om/build comp1 (f cursor)) имеет тот же эффект, что и (om/build comp1 cursor {:fn f})

Итак, ответ таков: это действительно зависит от того, что делает f. Пока (f x) (или его содержимое) все еще является курсором, вы можете om/transact! или om/update! на нем (или его содержимом).

Например, если x равно {:x 1}, а f равно #(update-in % [:x] inc), f будет применено к значению курсора; лежащий в основе атом не изменится. Когда вы нажмете om/transact! или om/update! на (f x), он будет работать с атомом внутри курсора x. При следующем рендеринге вы снова получите (f x) на основе обновленного x.

С другой стороны, если f делает x не курсором (например, f это om/value), то вы вообще не сможете использовать om/transact! или om/update! на нем.

Надеюсь, это поможет.

person David L    schedule 28.08.2015