+ The page you were looking for doesn't exist.
+ Go back to devdocs.io.
+
+ The page you were looking for doesn't exist.
+ Go back to devdocs.io.
+
+{``} ++ +
+ {' '} + +
+ ++{` +`} ++ +
+ {' '} + +
+{'\r'}+ +
+ {' '} + {' '} + {' '} + {' '} + {' '} + +
+ ++{` + + + + + +`} ++
需要扩展可以添加className
++ +
+{''}+ +
+ +
+{''}+ +
两个实例方法 enable(启用) 和 disable (禁用),可以传入一个参数(字符串或者element)替换按钮内容
++ {' '} + +
+ ++{` +`} ++ +
+{`disableExample: function (event) {
+ var button = this.refs.button;
+ if (event.target.checked) {
+ button.disable( 我被禁用了);
+ } else {
+ button.enable("我又可以使用了");
+ }
+}`}
+
+
+ +{`+ +`} +
+
{'+ +'}
+
{'+ +'}
获取值,选中状态下如果有 value,返回 value ,否则返回 true ,未选中状态返回 false
+ +如果 value 值与 props.value 相等,或者值为 true 或者 1 ,设置为选中状态
+ ++{`+ + +`} + +
{'[{"text":"北京","id":"beijing"},{"text":"上海", "id":"shanghai"}]'}+
{'[{"cn":"北京","py":"beijing"},{"cn":"上海", "py":"shanghai"}]'}+
{'["北京","上海","广州"]'}+ +
{'+'}
+{`data = [ + { "id": "nanjing", "text": "南京" }, + { "id": "beijing", "text": "北京" }, + { "id": "guangzhou", "text": "广州" }, + { "id": "shenzhen", "text": "深圳" }, + { "id": "chengdu", "text": "成都" }, + { "id": "chongqing", "text": "重庆" }, + { "id": "shanghai", "text": "上海" } +]`} ++ +
{'+ +'}
{'+ +'}
{'+ +'}
{'+'}
Select, Tree 等控件需要从服务器远程获取数据的接口。
+接口返回一个方法,then成功回调,catch失败回调,complete成功与失败都会调用
+ReactUI内部提供了一个dataSource,使用Qwest实现的,可以用其他的Ajax框架自行实现。
++{`function (src, data, options) { + let stacks = { + 'then': [], + 'catch': [], + 'complete': [] + }, + promises = ['then', 'catch', 'complete'], + req = null, + + qwest = function () { + req = Qwest.get(src, data, options) + promises.forEach(p => { + req[p](res => { + stacks[p].forEach(func => { + func(res) + }) + }) + }) + return qwest + } + + promises.forEach(p => { + qwest[p] = func => { + stacks[p].push(func) + return qwest + } + }) + + return qwest +}`} ++
+{`+ +`} +
{`+ +`}
{`+ +`}
{`+ +`}
{`+ +`}
{`+`}
+{`+ ++options = { + label: 'string' // 显示的文字,必填 + name: 'string' // 对应的字段名称,必填 + ops: ['string'] // 可选方法,默认值为 ['=', 'like', '>', '>=', '<', '<=', 'in', 'not in'] + type: 'string' // 选择值的类型,可选值为 'text', 'number', 'integer', 'datetime', 'select' + // 默认值为 'text' + props: object // type 为 Component 的参数 + 'op': function // 如果ops包含自定义方法,需要在前端做筛选,在此实现 +}`} +
+{`startWidth: function (d, value) { + return d.name.indexOf(value) === 0 +}`} ++ 示例见 Table。 +
+{`let options = [{ + label: '姓名', + name: 'name', + ops: ['like', '=', 'startWidth'] +}, { + label: '年龄', + name: 'age', + ops: ['>=', '<'], + type: 'number' +}, { + label: '生日', + name: 'birthday', + ops: ['>=', '<'], + type: 'datetime' +}, { + label: '地区', + name: 'office', + ops: ['='], + type: 'select', + props: { data: ['Tokyo', 'Singapore', 'New York', 'London', 'San Francisco'] } +}, { + label: '国籍', + name: 'country', + ops: ['='], + type: 'select', + props: { data: dataSource('json/countries.json'), optionTpl: '{country}', valueTpl: '{en}' } +}] ++this.setState({ filterText: JSON.stringify(fs) })} options={options} /> +`} +
+{``} + + +
0.3 版更新,From 不再提供内置 Ajax 提交功能,需要在onSubmit中进行提交
+ +注:本文档使用了一个 json 文件模拟服务端返回数据,提交会提示 500 错误
+ + + ++{`+`} + + +
获取当前所有注册FormControl的value,结果为json
+ +Form 下不能使用 ref 获取引用,需要引用时使用 getReference 方法。name 为 FormControl 的 name
+{type} => {component}
++ {`+`} +
一系列表单控件的马甲,统一封装用来实现表单数据验证,输入提示,动态创建表单等功能。可以通过 getReference() 这个方法获取被封装的控件。
++{`+ +`} +
FormControl 会根据这些属性自动验证输入,自动生成提示文字和错误信息,文字在 Lang 中设置。
++{`+ +`} +
text => Input
++ {`+`} +
textarea => Input
++ {`+`} +
select => Select
++{`+`} +
tree => Tree
++{`+`} +
checkbox => Checkbox
++ {`+`} +
checkbox-group => CheckboxGroup
++{`+`} +
radio-group => RadioGroup
++{`+`} +
rating => RadioGroup
++{`+, ]} + />`} +
upload => Upload
++{`+选择文件} +/>`} +
可以使用 children 来处理一些复杂结构。注意每个 FormControl 只能有一个表单组件,类型必须和 FormControl 的 type 相同。
++{`+ ++ + `} ++ + +
+ FormControl 提供一个静态方法 register,将一个 Component 注册为 FormControl 成员。
+ 每个注册为 FormControl 的控件必须实现 getValue() , setValue(data) 这两个接口。
+
+{`FormControl.register( + type, // string,控件类型,唯一。如果同名,后注册的将会覆盖先注册的控件 + render, // function,匹配到类型时,调用render方法返回相应控件 + valueType, // 'string|array|number',控件值类型,三选一,数据验证时调用 +)`} ++
+ 支持 font-awesome 和 material-design-iconic-font
+ 默认的前缀为 icon,如果使用less,生成这两个字体的css时,指定 prefix 为 icon
+ 如果使用这两个字体原生的前缀 fa 或者 zmdi,调用 Icon.setPrefix(prefix) 这个全局方法设置
+
+{`+ +`} +
{'+ +camera-retro'}
{'+ +\r '}
+{`+ ++ + + + + `} +
有两个实例方法控制旋转,spin 和 unspin
+{'icon.spin()\ricon.unspin()'}+
+{``} ++ +
示例见 FormControl
+{JSON.stringify(getLang(), null, 4)}+
{'Message.show(content, type)'}+
content:内容,必填,值为 string 或 element
+type:样式,会增加一个class messsage-[type],默认值为 info
+ +Message.show("Info message.")}>info message
+{'Message.show("info message.")'}+ +
Message.show("error message.", "error")}>error message
+{'Message.show("error message.", "error")'}+ +
Message.show(title
span message
{'Message.show(+ +, "warning")'}title
span message
Message.show(
{'Message.success( success and icon, "success")'}
+
+ 默认会添加 message-extend 类,可以通过这个类进行扩展。
+{`第 ${i} 层Modal`}
) + } + + let options = { + header: `第 ${index} 层Modal`, + width: width, + content: ( + + ), + onClose: () => { + this.setState({ index: index - 1 }) + }, + buttons: { + '关闭': true + } + } + Modal.open(options) + this.setState({ index }) + } + + render () { + let openOptions = { + header: '一个弹出表单', + content: ( ++{`options = { + clickaway: {bool}, // 为 true 时,点击页面空白部分关闭Modal,默认值为 false + header: {string|element}, // 标题,值为 string 或者 ReactElement,可为空 + content: {string|element}, // 内容,值为 string 或者 ReactElement,必填 + width: {int|string}, // 宽度,默认值为 500 + onClose: function, // 当Modal关闭时触发 + buttons: { + {text}: function // text 为按钮文字,function 返回 true 或者值为 true,关闭 Modal + } +}`} ++
+{`Modal.open( + header: '一个弹出表单', + content: ( ++ ++ ++ ), + width: 700, + buttons: { + '取消': true, + '重置': () => { + let form = this.refs.form + form.setData({}) + }, + '确定': () => { + let form = this.refs.form + let suc = form.validate() + if (suc) { + alert(JSON.stringify(form.getValue())) + return true + } + } + } +)`} +
{`Modal.alert('这是一个alert')`}+ +
+{`Modal.confirm( ++ ++, + () => { alert('点击了确定') } +)`} +如果你知道要做什么,请点确定。
+如果你不知道,点取消吧。
+
+{`multOpen () { + let index = this.state.index + 1, + width = Math.ceil((Math.random() + 1) * 400), + ps = [] + + for (var i = 1; i <= index; i++) { + ps.push(+{'第 ' + i + ' 层Modal'}
) + } + + let options = { + header: '第 ' + index + ' 层Modal', + width: width, + content: ( + + ), + onClose: () => { + this.setState({ index: index - 1 }) + }, + buttons: { + '关闭': true + } + } + Modal.open(options) + this.setState({ index }) +} +mult open +`} +
+{`+ +`} +
index: this.setState({index: parseInt(v)})} />
+size: this.setState({size: parseInt(v)})} />
+total: this.setState({total: parseInt(v)})} />
+pages: this.setState({pages: parseInt(v)})} />
++{`+ + +`} +
{'[{"text":"北京","id":"beijing"},{"text":"上海", "id":"shanghai"}]'}+
{'[{"cn":"北京","en":"beijing"},{"cn":"上海", "en":"shanghai"}]'}+
{'["北京","上海","广州"]'}+ +
{'+'}
+{`data = [ + { "id": "nanjing", "text": "南京" }, + { "id": "beijing", "text": "北京" }, + { "id": "guangzhou", "text": "广州" }, + { "id": "shenzhen", "text": "深圳" }, + { "id": "chengdu", "text": "成都" }, + { "id": "chongqing", "text": "重庆" }, + { "id": "shanghai", "text": "上海" } +]`} ++ +
{'+ +'}
{'+ +'}
{'+'}
+{`+ ++ +Rating.register( // 注册一个主题,供重复调用 + string, // 主题名称 + array // 等同与 icons +) +`} +
+{`// 注册主题 +Rating.register('star', [ ++, + +]) + +// state +getInitialState: function () { + return { + readOnly: false, + maxValue: 5, + value: 3, + theme: 'star' + } +} + + this.setState({ value })} +/> + +maxValue: this.setState({ maxValue })} + value={this.state.maxValue} data={[5, 10, 12, 20]} /> + + this.setState({ + icons: checked ? + [ , + ] : + null + })} + text={'设置icons为heart'} /> + + this.setState({ readOnly })} + text={'readOnly'} /> + +value: this.setState({ value: event.target.value })} + type="text" value={this.state.value} /> +`} +
+{` +模板使用 "{key}" 形式的字符串进行格式化。 +data 为简单数组(如["中国", "美国", "俄罗斯", "德国"]),时,所有模板无效。 +`} ++ + +
+{` +`} ++ +
+{`
+{`function (data) { + return +}`} ++
{`this.refs.table.getChecked('name')`}+
{this.state.checkedNames}
++{`let pagination =++let nameTpl = (d) => { + return { Modal.alert('点击了:' + d.name) }}>{d.name} +} +let removeTpl = (d) => { + return { Modal.confirm('确定要删除' + d.name + '吗', () => {}) }}>删除 +} + +let filterOptions = [{ + label: '姓名', + name: 'name', + ops: ['like', '=', 'startWidth'], + startWidth: function (d, value) { + return d.name.indexOf(value) === 0 + } +}, { + label: '地区', + name: 'office', + ops: ['='], + type: 'select', + props: { data: ['Tokyo', 'Singapore', 'New York', 'London', 'San Francisco'] } +}, { + label: '地区2', + name: 'office', + ops: ['in', 'not in'], + type: 'select', + props: { mult: true, data: ['Tokyo', 'Singapore', 'New York', 'London', 'San Francisco'] } +}] + +const headers = [ + { name: 'name', sortAble: true, content: nameTpl, header: 'Name' }, + { name: 'position', hidden: true }, + { name: 'office', sortAble: true, header: 'Office' }, + { name: 'start_date', sortAble: true, content: '{start_date}', header: 'Start Date' }, + { name: 'salary', content: '{salary}', header: 'Salary' }, + { name: 'tools', width: 60, content: removeTpl } +] + + this.setState({ filters })} style={{marginBottom: 20}} local={true} options={filterOptions} /> + + +`} +
+{`+ + +`} +
+{`+ +this.refs.textClick.getDOMNode().innerText = 'clicked ' + item.text} + textTpl="{text}({id})" + valueTpl="{id}" + value={this.state.value} + open={true} + sep={this.state.sep} +/> + + this.setState({ selectAble: value })} + checked={this.state.selectAble} text="selectAble" /> + this.setState({ readOnly: value })} + checked={this.state.readOnly} text="readOnly" /> + this.setState({ greedy: value })} + checked={this.state.gre} text="greedy" /> +Switch Key +`} +
{this.state.treeData}+
+{`+ +`} +
+{`+选择文件} +/>`} +