有人可以帮助我更好地理解组件,查询等。我正在努力完成一项看似微不足道的任务,我需要一个带参数化查询的组件。该组件的实例需要包含在父组件中, 例如,我想要需要在一群孩子中分配不同种类的水果的列表,每一行都会显示孩子的名字和一种水果的种类:
(defui FruitsLedger
static om/IQuery
(query [this]
'[(:data/fruits) {:kind ?kind}])
Object (render [this]
(let [{:keys [data/fruits]} (om/props this)]
(dom/ul nil (apply #(dom/li nil (str "for " (% :kid) " " (% :qt))))))))
现在我需要让我们在另一个组件中说出这个组件的两个实例
其中:params
将是:{:kind :apples}
将是:{:kind :oranges}
这应该呈现2个与此类似的列表:
| apples | oranges |
|---------------+---------------|
| for Aaron 2 | for Katie 1 |
| for Dan 1 | for Rob 3 |
| for Charles 0 | for Charles 3 |
| | |
|---------------+---------------|
答案 0 :(得分:1)
我确定参数化查询有其用途。但也许这个问题和其他类似的问题可以在不诉诸它们的情况下解决。
在您的数据库中使用:app/fruit-query-kinds
(默认数据库格式)。这将是一份水果清单。您已经拥有了水果组件,但是您需要另一个组件,这个组件具有用于查询目的的水果种类列表。为此组件提供查询和标识。是否要显示它并不重要。最重要的是让数据结构正确。它的标识类似于:'[:fruit-query-kind/by-id 1100]
,它可能包含'[:fruit/by-id 10]
和'[:fruit/by-id 20]
。根据你的例子,10将是苹果的id和20的橘子。这将是密钥:app/fruit-query-kinds
的refs值(默认数据库存储中的idents向量)。 1100只是一个不会被期望改变的唯一数字。
数据结构是重要的,所有内容都可以在其中建模,甚至查询参数。
您需要在某处直接更改数据库中的水果查询类型的突变和一些按钮(或其他输入)调用transact!
。如果您不需要重新呈现,请使用应用的协调程序调用{{1}},而不是使用组件。
我们的想法是,您可以使用组件来查询用户先前做出的选择。所以你的第一个列表组件不知道它是苹果的 - 它只知道它是显示第一种水果查询类型的结果。
我发现您可以根据需要在视图和数据库之间执行来回,使db不仅可以存储数据,还可以存储当前状态的观点。到目前为止,我遇到麻烦的唯一一次是当我错误地在组件查询中的布尔键的transact!
上进行交易时。那当然最终会出现在一个永远闪烁的屏幕上。
在我看来,简单地使用客户端上的Om Next工作的方式是使所有读取看起来完全相同,全部使用not
。一旦你接受了这种方法,下一步就是将它们全部放在一起,你可以通过切换到Untangled框架来完成它们。