Clojure - 附加集合不起作用
Clojure - Append Collection is not working
我有上传图片的功能。有一个图片库,我需要在添加新照片时更新图库。照片上传成功,但是 UI 没有更新新添加的照片。
我正在使用 entitydb 在本地存储列表。
我的控制器方法如下:
:post-art (pipeline! [value app-db]
(when value
(pipeline! [value app-db]
(post-art-photo app-db value)
(let [res (:createArtPicture value)]
(pp/commit! (edb/append-collection app-db :artPicture :list [(assoc res :art {:id (:artId res)})]))
(pp/commit! (assoc-in app-db [:kv :art-pictures-list] (edb/get-collection app-db :artPicture :list)))
(pp/commit! (assoc-in app-db [:kv :temp-photo] nil))
(navigate-go! {:key "art-single" :id (:artId res)}))
(rescue! [error]
nil))))
entitydb 架构是:
(def edb-schema
{:art {:id :id
:relations {:photos [:many :asset]
:authors [:many :author]
:campus [:one :campus]
:thumbnail [:one :asset]
:categories [:many :artCategory]}}
:author {:id :id
:relations {:avatar [:one :asset]
:arts [:many :art]}}
:campus {:id :id
:relations {:arts [:many :art]
:photo [:one :asset]}}
:artCategory {:id :id
:relations {:icon [:one :asset]
:arts [:many :art]}}
:artList {:id :id
:relations {:user [:one :user]
:state [:many :art]}}
:artPicture {:id :id
:relations {:user [:one :user]
:art [:one :art]}
:middleware {:set [(fn [a]
(assoc a :art {:id (:artId a)}))]}}
:comment {:id :id
:relations {:user [:one :user]
:art [:one :art]}
:middleware {:set [(fn [a]
(assoc a :art {:id (:artId a)}))]}}
:favorite {:id :id
:relations {:user [:one :user]}}
:game {:id :id
:relations {:user [:one :user]}}
:user {:id :id
:relations {:artLists [:many :artList]
:artPictures [:many :artPicture]
:comments [:many :comment]
:favorites [:many :favorite]
:games [:many :game]}}
:asset {:id :id}})
问题出在 'artPicture'。 'comment'也有同样的特点。但是,那工作正常。有人帮忙吗?
终于,我找到了解决办法。我已将代码包装在 "pipeline! [value app-db]" 中并且有效!
:post-art-picture (pipeline! [value app-db]
(when value
(pipeline! [value app-db]
(post-art-photo app-db value)
(let [res (:createArtPicture value)]
(pipeline! [value app-db]
(pp/commit! (edb/append-collection app-db :artPicture :list [(assoc res :art {:id (:artId res)})]))
(pp/commit! (assoc-in app-db [:kv :temp-photo] nil))
(navigate-replace! (-> (util/current-route (get-in app-db [:route]))
(dissoc :subpage)
(assoc :subpage "completed")))
(rescue! [error]
(util/log "Photo Upload ERROR:" error)))))))
我有上传图片的功能。有一个图片库,我需要在添加新照片时更新图库。照片上传成功,但是 UI 没有更新新添加的照片。
我正在使用 entitydb 在本地存储列表。
我的控制器方法如下:
:post-art (pipeline! [value app-db]
(when value
(pipeline! [value app-db]
(post-art-photo app-db value)
(let [res (:createArtPicture value)]
(pp/commit! (edb/append-collection app-db :artPicture :list [(assoc res :art {:id (:artId res)})]))
(pp/commit! (assoc-in app-db [:kv :art-pictures-list] (edb/get-collection app-db :artPicture :list)))
(pp/commit! (assoc-in app-db [:kv :temp-photo] nil))
(navigate-go! {:key "art-single" :id (:artId res)}))
(rescue! [error]
nil))))
entitydb 架构是:
(def edb-schema
{:art {:id :id
:relations {:photos [:many :asset]
:authors [:many :author]
:campus [:one :campus]
:thumbnail [:one :asset]
:categories [:many :artCategory]}}
:author {:id :id
:relations {:avatar [:one :asset]
:arts [:many :art]}}
:campus {:id :id
:relations {:arts [:many :art]
:photo [:one :asset]}}
:artCategory {:id :id
:relations {:icon [:one :asset]
:arts [:many :art]}}
:artList {:id :id
:relations {:user [:one :user]
:state [:many :art]}}
:artPicture {:id :id
:relations {:user [:one :user]
:art [:one :art]}
:middleware {:set [(fn [a]
(assoc a :art {:id (:artId a)}))]}}
:comment {:id :id
:relations {:user [:one :user]
:art [:one :art]}
:middleware {:set [(fn [a]
(assoc a :art {:id (:artId a)}))]}}
:favorite {:id :id
:relations {:user [:one :user]}}
:game {:id :id
:relations {:user [:one :user]}}
:user {:id :id
:relations {:artLists [:many :artList]
:artPictures [:many :artPicture]
:comments [:many :comment]
:favorites [:many :favorite]
:games [:many :game]}}
:asset {:id :id}})
问题出在 'artPicture'。 'comment'也有同样的特点。但是,那工作正常。有人帮忙吗?
终于,我找到了解决办法。我已将代码包装在 "pipeline! [value app-db]" 中并且有效!
:post-art-picture (pipeline! [value app-db]
(when value
(pipeline! [value app-db]
(post-art-photo app-db value)
(let [res (:createArtPicture value)]
(pipeline! [value app-db]
(pp/commit! (edb/append-collection app-db :artPicture :list [(assoc res :art {:id (:artId res)})]))
(pp/commit! (assoc-in app-db [:kv :temp-photo] nil))
(navigate-replace! (-> (util/current-route (get-in app-db [:route]))
(dissoc :subpage)
(assoc :subpage "completed")))
(rescue! [error]
(util/log "Photo Upload ERROR:" error)))))))