Skip to content

Commit 2420bf1

Browse files
authored
Merge pull request #315 from e1emeb0t/dev
Update Form
2 parents a25a06f + 0ecaea6 commit 2420bf1

File tree

5 files changed

+47
-66
lines changed

5 files changed

+47
-66
lines changed

dist/npm/src/form/Form.js

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ var Form = function (_Component) {
2929
var _this = _possibleConstructorReturn(this, (Form.__proto__ || Object.getPrototypeOf(Form)).call(this, props));
3030

3131
_this.state = {
32-
fields: {},
33-
fieldLength: 0
32+
fields: []
3433
};
3534
return _this;
3635
}
@@ -45,53 +44,52 @@ var Form = function (_Component) {
4544
}, {
4645
key: 'addField',
4746
value: function addField(field) {
48-
this.state.fields[field.props.prop] = field;
49-
this.state.fieldLength++;
47+
this.state.fields.push(field);
5048
}
5149
}, {
5250
key: 'removeField',
5351
value: function removeField(field) {
54-
delete this.state.fields[field.props.prop];
55-
this.state.fieldLength--;
52+
if (field.props.prop) {
53+
this.state.fields.splice(this.state.fields.indexOf(field), 1);
54+
}
5655
}
5756
}, {
5857
key: 'resetFields',
5958
value: function resetFields() {
60-
var fields = this.state.fields;
61-
62-
63-
for (var key in fields) {
64-
fields[key].resetField();
65-
}
59+
this.state.fields.forEach(function (field) {
60+
field.resetField();
61+
});
6662
}
6763
}, {
6864
key: 'validate',
6965
value: function validate(callback) {
70-
var _state = this.state,
71-
fields = _state.fields,
72-
fieldLength = _state.fieldLength;
66+
var _this2 = this;
7367

74-
var count = 0,
75-
valid = true;
68+
var valid = true;
69+
var count = 0;
7670

77-
for (var key in fields) {
78-
fields[key].validate('', function (errors) {
71+
// 如果需要验证的fields为空,调用验证时立刻返回callback
72+
if (this.state.fields.length === 0 && callback) {
73+
callback(true);
74+
}
75+
76+
this.state.fields.forEach(function (field, index) {
77+
field.validate('', function (errors) {
7978
if (errors) {
8079
valid = false;
8180
}
82-
83-
if (++count === fieldLength) {
81+
if (typeof callback === 'function' && ++count === _this2.state.fields.length) {
8482
callback(valid);
8583
}
8684
});
87-
}
85+
});
8886
}
8987
}, {
9088
key: 'validateField',
9189
value: function validateField(prop, cb) {
92-
var fields = this.state.fields;
93-
94-
var field = fields[prop];
90+
var field = this.state.fields.filter(function (field) {
91+
return field.props.prop === prop;
92+
})[0];
9593

9694
if (!field) {
9795
throw new Error('must call validateField with valid prop string!');

dist/npm/src/form/FormItem.js

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,6 @@ var FormItem = function (_Component) {
7070
return false;
7171
}
7272
});
73-
74-
var parent = _reactDom2.default.findDOMNode(this.parent());
75-
if (parent) {
76-
parent.addEventListener('blur', this.onFieldBlur.bind(this));
77-
parent.addEventListener('change', this.onFieldChange.bind(this));
78-
}
7973
}
8074
}
8175
}
@@ -246,7 +240,7 @@ var FormItem = function (_Component) {
246240
'is-error': error !== '',
247241
'is-validating': validating,
248242
'is-required': isRequired || required
249-
}) },
243+
}), onBlur: this.onFieldBlur.bind(this), onChange: this.onFieldChange.bind(this) },
250244
label && _react2.default.createElement(
251245
'label',
252246
{ className: 'el-form-item__label', style: this.labelStyle() },

site/docs/zh-CN/checkbox.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,6 @@ handleCheckAllChange(checked) {
8686
}
8787

8888
handleCheckedCitiesChange(value) {
89-
console.log(value);
90-
9189
const checkedCount = value.length;
9290
const citiesLength = this.state.cities.length;
9391
this.setState({

src/form/Form.jsx

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import React from 'react';
44
import { Component, PropTypes } from '../../libs';
55

66
type State = {
7-
fields: Object,
8-
fieldLength: number
7+
fields: Array<Component>,
98
};
109

1110
export default class Form extends Component {
@@ -15,8 +14,7 @@ export default class Form extends Component {
1514
super(props);
1615

1716
this.state = {
18-
fields: {},
19-
fieldLength: 0
17+
fields: []
2018
}
2119
}
2220

@@ -27,47 +25,46 @@ export default class Form extends Component {
2725
}
2826

2927
addField(field: Component): void {
30-
this.state.fields[field.props.prop] = field;
31-
this.state.fieldLength++;
28+
this.state.fields.push(field);
3229
}
3330

3431
removeField(field: Component): void {
35-
delete this.state.fields[field.props.prop];
36-
this.state.fieldLength--;
32+
if (field.props.prop) {
33+
this.state.fields.splice(this.state.fields.indexOf(field), 1);
34+
}
3735
}
3836

3937
resetFields(): void {
40-
const { fields } = this.state;
41-
42-
for (const key in fields) {
43-
fields[key].resetField();
44-
}
38+
this.state.fields.forEach(field => {
39+
field.resetField();
40+
});
4541
}
4642

4743
validate(callback: Function): void {
48-
const { fields, fieldLength } = this.state;
49-
let count = 0, valid = true;
44+
let valid = true;
45+
let count = 0;
46+
47+
// 如果需要验证的fields为空,调用验证时立刻返回callback
48+
if (this.state.fields.length === 0 && callback) {
49+
callback(true);
50+
}
5051

51-
for (const key in fields) {
52-
fields[key].validate('', errors => {
52+
this.state.fields.forEach((field, index) => {
53+
field.validate('', errors => {
5354
if (errors) {
5455
valid = false;
5556
}
56-
57-
if (++count === fieldLength) {
57+
if (typeof callback === 'function' && ++count === this.state.fields.length) {
5858
callback(valid);
5959
}
6060
});
61-
}
61+
});
6262
}
6363

6464
validateField(prop: string, cb: Function): void {
65-
const { fields } = this.state;
66-
const field = fields[prop];
65+
const field = this.state.fields.filter(field => field.props.prop === prop)[0];
6766

68-
if (!field) {
69-
throw new Error('must call validateField with valid prop string!');
70-
}
67+
if (!field) { throw new Error('must call validateField with valid prop string!'); }
7168

7269
field.validate('', cb);
7370
}

src/form/FormItem.jsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,6 @@ export default class FormItem extends Component {
4444
return false;
4545
}
4646
});
47-
48-
const parent= ReactDOM.findDOMNode(this.parent());
49-
if (parent) {
50-
parent.addEventListener('blur', this.onFieldBlur.bind(this))
51-
parent.addEventListener('change', this.onFieldChange.bind(this))
52-
}
5347
}
5448
}
5549
}
@@ -191,7 +185,7 @@ export default class FormItem extends Component {
191185
'is-error': error !== '',
192186
'is-validating': validating,
193187
'is-required': isRequired || required
194-
})}>
188+
})} onBlur={this.onFieldBlur.bind(this)} onChange={this.onFieldChange.bind(this)}>
195189
{
196190
label && (
197191
<label className="el-form-item__label" style={this.labelStyle()}>

0 commit comments

Comments
 (0)