我试图弄清楚如何使用 GraphQL 在父子关系中实现自下而上的过滤。
考虑以下对停车场和可用停车位进行建模的基本类型层次结构:
type ParkingLot {
id: Int!
spots: [ParkingSpot]
}
type ParkingSpot {
id: Int!,
occupied: Boolean!
}
Run Code Online (Sandbox Code Playgroud)
我想以一种使我能够检索所有至少有一个免费停车位的停车场的方式实现我的解析器。
query AllParkingLotsWithStatus($status : Boolean = false) {
ParkingLot {
id
spots(occupied: $status) {
id
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的 GraphQL 的具体实现是基于 PHP 的,可在此处获得,但任何基于 JS 的实现都非常有助于为我指明正确的方向。我知道有一些库支持使用“where:”参数进行过滤,但我必须自己实现这种机制,因为我使用的库没有提供开箱即用的功能。
我探索的一个想法是在 ParkingLot 的解析器中简单地编写一个 JOIN 语句,但我觉得这不符合 GraphQL 的精神。
我想到的另一个想法是重写查询,使其首先检索 ParkingSlots,并且仅在其状态可用时才获取其父级。然而,这可能是计算密集型的,因为停车位比停车位少,因此导航从父级到子级的关系的计算密集度可能较低。
你会建议什么方法不归结为改变类型层次结构(我没有能力做到这一点)。是否有一种方法可以在子节点的解析器中发生某些条件时立即拒绝父节点,或者这是否会被视为超出 GraphQL 实现的范围,而更像是正在使用的实际库的功能?我想因为有些库支持使用“where:”子句进行过滤,这一定是可能的,而且不应该很复杂。
我有一个JTextPane组件,我正在尝试将用户键入的文本设置为同时加下划线和删除线.
应该将下一个类型字符的删除线属性设置为true的相关代码片段如下:
JEditorPane editor = getEditor(e);
if (editor != null) {
StyledEditorKit kit = getStyledEditorKit(editor);
MutableAttributeSet attr = kit.getInputAttributes();
SimpleAttributeSet sas = new SimpleAttributeSet();
StyleConstants.setStrikeThrough(sas, true);
setCharacterAttributes(editor, sas, false);
}
Run Code Online (Sandbox Code Playgroud)
这样可以将文本设置为删除线,但如果它已经设置为下划线,则会丢失下划线样式信息.仔细看看StyleConstants.setStrikeThrough(...)背后的实际代码我注意到下划线和删除线属性的CSS样式标记将是相同的(即"文本装饰"),并且当值更新时保存属性的哈希表,它将被覆盖.
这意味着代码如下:
StyleConstants.setStrikeThrough(sas, true);
StyleConstants.setUnderlineThrough(sas, true);
Run Code Online (Sandbox Code Playgroud)
将导致下一个键入的字符加下划线而没有删除线.我检查了属性值,对于"text-decoration"属性,值是"下划线",而我期待"直通,下划线".
有谁知道如何以一个干净的Swing兼容方式实现这一目标?我的方法有问题吗?在JTextPane样式的核心是否存在一个潜在的假设,即文本不应该同时删除并强调下划线?