【发布时间】:2020-01-03 05:33:21
【问题描述】:
我正在编写一个重新构建应用程序来模拟棋盘游戏,其中我有一个包含一组单元格的棋盘结构,例如:
{... :board-cells [{:name "cell-1" :material #object} {:name "cell-2" :material #object} ...]}
虽然 re-frame 支持使用像 (db :board-cells) 这样漂亮的关键字语法获取“自然”子结构,但我已经厌倦了每次想要获取材料时都必须编写整个“向下钻取”查询:(get (nth (db :board-cells) index) :material)。这也有将我的数据库的物理布局与我的应用程序逻辑紧密耦合的缺点。如果我决定改变我的数据库结构怎么办?然后我必须更新十个不同的点,而不仅仅是一个。
是否有一种重新构建官方方法来创建“虚拟查询”,这样我就可以获得类似(db :get-nth-mat n) 的材料,其中 n 是board-cells 数组中的单元格编号?我认为db.cljs 和reg-sub 是我可以做到这一点的地方,但它似乎不起作用。是的,我可以创建自己的 getter:
(defn get-material [db index]
(get (nth (db :board-cells) index) :material))
并称它为(println "mat-4=" (cell/get-material db 4)),但这不如(db :get-nth-mat n) 方便或好听
非常感谢。
【问题讨论】: