我找不到隐藏输入的方法取决于一些记录值。我试图让'user_id': fields.related(
'employee_id', 'user_id', type="many2one",
relation="res.users", string="User", required=False,
default=lambda self: False, store=True),
获得当前状态,但我失败了。
import { formValueSelector } from 'redux-form'
答案 0 :(得分:12)
您可以使用marmelab/aor-dependent-input,它是根据其他输入值显示输入的组件。
使用示例:
import React from 'react';
import {
Create, SimpleForm, TextInput, DisabledInput, NumberInput
} from 'admin-on-rest';
import DependentInput from 'aor-dependent-input';
const checkAge = (age) => {
return parseInt(age, 10) > 18;
};
const UserCreate = (props) => (
<Create {...props}>
<SimpleForm>
<DisabledInput source="id"/>
<NumberInput source="age" step="1" />
<DependentInput dependsOn="age" resolve={checkAge}>
<TextInput source="question"/>
</DependentInput>
</SimpleForm>
</Create>
);
export default UserCreate;
答案 1 :(得分:5)
record
在您提交之前不会更改,因此您的解决方案无效。我相信解决方案是在自定义连接的输入组件中使用formValueSelector
,如in the redux-form documentation所述。
像:
// in src/ConditionalInput.js
import React from 'react';
import { connect } from 'react-redux';
import { formValueSelector } from 'redux-form'
import { TextInput } from 'admin-on-rest/lib/mui`;
const ConditionalInput = ({ isDisplayed, condition, children, ...rest }) =>
isDisplayed
? React.cloneElement(children, rest)
: null;
function mapStateToProps(state, props) {
return {
isDisplayed: props.condition(formValueSelector('record-form')),
}
}
export default connect(mapStateToProps)(ConditionalInput);
// in your EditView
export default props =>
<Edit {...props}>
<SimpleForm>
<DisabledInput source="id"/>
<NumberInput options={opts} source="age" />
<ConditionalInput condition={selector => selector('age') > 18}>
<TextInput options={opts} source="question"/>
</ConditionalInput>
</SimpleForm>
</Edit>
答案 2 :(得分:1)
François的回答非常接近并且公平地认为我不是那么干净,但我遇到了一些问题:
worker = fib_Worker().worker
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
jobs.append(p)
p.start()
也需要状态selector
经过一番挖掘后,我发现被触摸的是元属性,请参阅:https://github.com/marmelab/admin-on-rest/blob/master/docs/Inputs.md。该页面指出Trying to access touched of undefined
正在将<Field>
和meta
属性传递给其子级。我试着修复弗朗索瓦的答案,但更多的改变是我关心修改他的答案。
input
向François致信,指出我与表格的正确方向。
不幸的是,使用此解决方案,您需要将每个字段包装在变量中,以便能够传递到const ConditionalChildRendering = ({isDisplayed, condition, children, ...rest}) => {
return isDisplayed
? React.cloneElement(children, rest)
: null;
}
const ConditionalInput = connect((state, props) => {
return {
isDisplayed: props.condition(formValueSelector('record-form'), state),
}
})(ConditionalChildRendering);
...
let conditionalTextField = ({meta, input, name, ...rest}) => {
return <ConditionalInput {...rest}>
<TextInput source={name} meta={meta} input={input} {...rest} />
</ConditionalInput>;
};
<Field
component={conditionalTextField}
name="postcode"
condition={(selector,state) => selector(state, 'somefield') === 'somevalue'} />
的{{1}}属性。 (但如果有人知道更好的方式,请分享,我是新来的反应)