【发布时间】:2015-10-29 11:59:26
【问题描述】:
我正在尝试使用 reac 制作动态表单,并且需要使用 ajax 函数提交此表单,我已经有了这个:
_change:function _change(data){
console.log(data);
},
render:function() {
var conjunto = [];
var element = JSON.parse(this.props.elements);
return (
<div className="formNew">
{Object.keys(elementos).map(function(key, index) {
return <FormElement key={index} change={this._change} nombre={key} meta={element[key]}></FormElement>
}, elementos)}
<input type="submit" value="Submit" />
</div>
);
} ,
问题是我有回调的 change 属性,但脚本告诉我 _change 函数未定义,如果我这样做,它可以工作:
return (
<div className="formularioAlta">
{Object.keys(elementos).map(function(key, index) {
return <FormElement key={index} cambia={function(data){console.log(data)}} nombre={key} meta={elementos[key]}></FormElement>
}, elementos)}
<input type="submit" value="Submit" />
</div>
);
我如何使用 _change 函数进行回调并确保此设置
在这里你可以看到完整的脚本:
var FormElement=React.createClass({
getInitialState: function getInitialState() {
return { errorText: '', inputValue: '' };
},
propTypes: {
change: React.PropTypes.func
},
componentDidMount: function() {
},
toggle:function() {
this.refs.leftNav.toggle();
},
_handleValidateText: function _handleValidateText() {
this.props.change(event.target.value);
this.setState({inputValue: event.target.value,errorText:''});
},
_handleValidateNumber: function _handleValidateNumber(event) {
if(!isNaN(parseFloat(event.target.value)) && isFinite(event.target.value)){
this.setState({inputValue: event.target.value,errorText:''});
}else{
this.setState({errorText:'Error'});
}
this.props.change(event.target.value);
},
_handleKeyPress: function _handleKeyPress(n,event) {
this.setState({inputValue: event,errorText:''});
},
render:function() {
if(this.props.meta.tipo==3){
var element = <mui.TextField
className={this.props.nombre}
hintText=""
errorText={this.state.errorText}
value={this.state.inputValue}
onChange={this._handleValidateText}
floatingLabelText={this.props.meta.verbose_name}>
</mui.TextField>
}else if(this.props.meta.tipo==16){
var element = <mui.TextField
className={this.props.nombre}
hintText=""
value={this.state.inputValue}
errorText={this.state.errorText}
onChange={this._handleValidateNumber}
floatingLabelText={this.props.meta.verbose_name}>
</mui.TextField>
}else if(this.props.meta.tipo==26){
var element = <mui.DatePicker
autoOk={true}
hintText={this.props.meta.verbose_name}
onChange={this._handleKeyPress}>
</mui.DatePicker>
}
return (
<div>
{element}
</div>
);
}
});
var CreaForm=React.createClass({
mixins:[mui.YBExt.claseBaseTheme.themeMixin],
getInitialState: function getInitialState() {
var elementos = JSON.parse(this.props.elementos);
var objElement = {};
var change = function _change(data){
console.log(data);
}
Object.keys(elementos).forEach(function(key, index) {
objElement[key]=""
}, elementos);
return { elementos: objElement };
},
componentDidMount: function() {
},
toggle:function() {
this.refs.leftNav.toggle();
},
_handleSubmit:function _handleSubmit(data){
event.preventDefault();
console.log(this.state.elementos);
},
_handleFormChange:function _handleFormChange(data){
this.state.elementos[data.target.name]=data.target.value;
this.setState({elementos:this.state.elementos});
},
_change:function _change(data){
console.log(data);
},
render:function() {
var conjunto = [];
var elementos = JSON.parse(this.props.elementos);
Object.keys(elementos).forEach(function(key, index) {
conjunto.push(
<FormElement key={index} change={function(data){console.log(data)}} nombre={key} meta={elementos[key]}></FormElement>
);
}, elementos);
return (
<div className="formularioAlta">
{conjunto}
<input type="submit" value="Submit" />
</div>
);
} ,
});
【问题讨论】: