admin-on-rest:访问Datagrid组件

时间:2017-07-03 10:57:51

标签: admin-on-rest

我有一个List视图,我希望根据ReferenceField组件创建的表中呈现的当前行的值来呈现Datagrid字段。

如何访问当前行的数据? (当前行的列的值)。

我尝试record.processed但是我收到一条错误,说记录对象不存在(processed是记录中我要检查的列,以便格式化字段)。我还尝试了resource.processedthis.props.processedthis.props.record.processed但没有成功。

显示我正在尝试做的事情的代码如下:

<List title="Sales Inquiries" filter={{ request_type: 'sales' }}  {...props}>
      <Datagrid>
          <TextField source="id" />
          <TextField source="firstname" label="First Name" />
          <TextField source="lastname" label="Last Name" />
          <TextField source="company" />
          <TextField source="email" />
          <DateField source="timestamp" label="Received" />

          {record.processed ?
            <ReferenceField label="Processed By" source="processedBy_id" reference="Users">
              <TextField source="username" />
            </ReferenceField>
          : <span>Nobody</span> }

          <ShowButton />
      </Datagrid>
  </List>

修改

按照@kunal pareek的建议,将一个HOC应用于ReferenceField字段,修改它以便按如下方式显示正确的内容:

const CustomField = (props) => (
  <span>
    {props.record.processed ?
      <ReferenceField label="Processed By" source="processedBy_id" reference="Users">
        <TextField source="username" />
      </ReferenceField>
    : <span>Nobody</span> }
  </span>
);

2 个答案:

答案 0 :(得分:1)

记录在您想要作为变量的位置实际上不可用。它作为prop传递给组件。

所以你可以做到这一点。

<List title="Sales Inquiries" filter={{ request_type: 'sales' }}  {...props}>
      <Datagrid>
          <TextField source="id" />
          <TextField source="firstname" label="First Name" />
          <TextField source="lastname" label="Last Name" />
          <TextField source="company" />
          <TextField source="email" />
          <DateField source="timestamp" label="Received" />
          <CustomField />

          <ShowButton />
      </Datagrid>
  </List>

const CustomField = (props) => (
          {props.record.processed ?
            <ReferenceField label="Processed By" source="processedBy_id" reference="Users">
              <TextField source="username" />
            </ReferenceField>
          : <span>Nobody</span> }
)

以上只是一个简单的例子。我已经直接采用了你的代码并重新格式化了,所以它可能不会直接起作用。但我一直在使用这种方法在几个地方更改我的组件的值。

您也可以使用HOC。你可以在这里找到例子

https://marmelab.com/admin-on-rest/Theming.html

答案 1 :(得分:0)

dependent-input插件可以帮助您。