Admin-on-Rest ReferenceField 无法正确呈现
Admin-on-Rest ReferenceField not rendering properly
我没有让 ReferenceField 正常工作,因为它只显示 'firstName' 字段的进度条 "spinning"。
我可以成功地将示例与来自 https://jsonplaceholder.typicode.com/ 的数据一起用于 simpleRest 客户端,但不能用于我自己的 API 端点。我看到 GET_LIST 请求 - 响应,然后是带有所有者数据的相关 GET_MANY 响应,但标记为 'User' 的参考字段未呈现。
API 端点的结构差异之一是我的 API 中返回的引用完全符合此结构 "resource:io.mydomain.#"
但是由于第二次 API 调用被触发并且数据返回,所以这似乎并不重要。在这一点上,我需要一些指示下一步要去哪里...
//App.js
const App = () => (
<Admin dashboard={Dashboard} theme={getMuiTheme(darkBaseTheme)} title="Admin" authClient={authClient} restClient={restClient}>
<Resource name="Asset" list={AssetList} label="Assets" />
<Resource name="Owner" list={UserList} label="Users" />
<Resource name="AssetTitle" list={AssetTitleList} label="Ownership" />
</Admin>
//users.js
export const UserList = (props) => (
<List title="All Users" {...props}>
<Datagrid>
<TextField source="id" />
<TextField source="firstName" />
<TextField source="lastName" />
<TextField source="mobile" />
<EmailField source="email" />
<EditButton />
</Datagrid>
</List>
);
//titles.js
export const AssetTitleList = (props) => (
<List title="All Titles..." {...props}>
<Datagrid>
<TextField source="id" />
<ReferenceField label="User" source="owner" reference="Owner" >
<TextField source="firstName" />
</ReferenceField>
<TextField source="information" />
</Datagrid>
</List>
);
//AssetTitle API returns
[{"$class":"io.mydomain.AssetTitle",
"id":"12345",
"owner":"resource:io.mydomain.Owner#11111",
"asset":"resource:io.mydomain.Asset#991",
"information":""}]
//Owner API returns
[{"$class":"io.mydomain.Owner",
"firstName":"Joe",
"lastName":"Doe",
"email":"joe@doe.com",
"mobile":"",
"id":"11111"}]
Screenshot of Referencefield rendering
您可能需要在 restClient
中清除从 API 返回的数据。
我看到 title
资源的 owner
字段是 resource:io.mydomain.Owner#11111
。但是,owner
资源的 id
字段是 11111
.
您必须实现自己的 restClient
和 "clean" 所有已知 ID,例如 owner
字段,以便它们仅包含 ID。请参阅 documentation 关于实现您自己的休息客户端。
我没有让 ReferenceField 正常工作,因为它只显示 'firstName' 字段的进度条 "spinning"。
我可以成功地将示例与来自 https://jsonplaceholder.typicode.com/ 的数据一起用于 simpleRest 客户端,但不能用于我自己的 API 端点。我看到 GET_LIST 请求 - 响应,然后是带有所有者数据的相关 GET_MANY 响应,但标记为 'User' 的参考字段未呈现。
API 端点的结构差异之一是我的 API 中返回的引用完全符合此结构 "resource:io.mydomain.#"
但是由于第二次 API 调用被触发并且数据返回,所以这似乎并不重要。在这一点上,我需要一些指示下一步要去哪里...
//App.js
const App = () => (
<Admin dashboard={Dashboard} theme={getMuiTheme(darkBaseTheme)} title="Admin" authClient={authClient} restClient={restClient}>
<Resource name="Asset" list={AssetList} label="Assets" />
<Resource name="Owner" list={UserList} label="Users" />
<Resource name="AssetTitle" list={AssetTitleList} label="Ownership" />
</Admin>
//users.js
export const UserList = (props) => (
<List title="All Users" {...props}>
<Datagrid>
<TextField source="id" />
<TextField source="firstName" />
<TextField source="lastName" />
<TextField source="mobile" />
<EmailField source="email" />
<EditButton />
</Datagrid>
</List>
);
//titles.js
export const AssetTitleList = (props) => (
<List title="All Titles..." {...props}>
<Datagrid>
<TextField source="id" />
<ReferenceField label="User" source="owner" reference="Owner" >
<TextField source="firstName" />
</ReferenceField>
<TextField source="information" />
</Datagrid>
</List>
);
//AssetTitle API returns
[{"$class":"io.mydomain.AssetTitle",
"id":"12345",
"owner":"resource:io.mydomain.Owner#11111",
"asset":"resource:io.mydomain.Asset#991",
"information":""}]
//Owner API returns
[{"$class":"io.mydomain.Owner",
"firstName":"Joe",
"lastName":"Doe",
"email":"joe@doe.com",
"mobile":"",
"id":"11111"}]
Screenshot of Referencefield rendering
您可能需要在 restClient
中清除从 API 返回的数据。
我看到 title
资源的 owner
字段是 resource:io.mydomain.Owner#11111
。但是,owner
资源的 id
字段是 11111
.
您必须实现自己的 restClient
和 "clean" 所有已知 ID,例如 owner
字段,以便它们仅包含 ID。请参阅 documentation 关于实现您自己的休息客户端。