【发布时间】:2016-04-07 18:00:29
【问题描述】:
我有一个看起来/工作起来有点像这样的伪结构:
Organization <- OrganizationType
{
TopLevelEmployees <- EmployeeType
{
id,
Name,
Pay,
Subordinates <- EmployeeType
{
id,
Name,
Pay,
Subordinates.if(variables.expanded)
}
},
Departments <- DepartmentType
{
Name,
Organization, <- OrganizationType
Employees
}
}
我有一个显示员工树结构的控件
<EmployeeTreeEditor Organization={organization} />
然后我有一个单独编辑部门的控件
<DepartmentEditor Department={department} />
DepartmentEditor 的 Relay 查询如下所示:
fragments: {
Department: () => Relay.QL`
fragment on Department
{
Employees
{
id,
Name,
Pay
},
Organization
{
id,
}
}
`}
DepartmentEditor 中有一个按钮,可以使用 RaiseDepartmentPayMutation 将该部门所有员工的工资提高 10%。
RaiseDepartmentPayMutation 的 fatQuery 如下所示:
fragments: {
Department: () => Relay.QL`
fragment on Department
{
Organization
}
`}
RaiseDepartmentPayMutation 返回一个 OrganizationPayload。
当在 DepartmentEditor 中按下 Raise Pay 按钮时,我想完全重新加载组织的 TopLevelEmployees,因为他们的工资可能已经改变。
问题是生成的查询是基于 Department::Organization 查询并且只获取组织 id。
我想如果我将 Organization 传递给 DepartmentEditor 而不是 Department,那么它可能会获取 TopLevelEmployees,但我不能继续将我的 Organization 传递给子控件。
我看到的另一个解决方案可能是在 EmployeeTreeEditor 和 Mutation fatQuery 中包含一个单独的片段
${Something.getFragment('Organization')}
但我不确定 fatQueries 如何处理树结构,这也是我想重新加载整个组织的原因。
这有意义吗?
谢谢!
【问题讨论】:
标签: relayjs