Ext.js5表单—(自定义错误信息)(formBind)(53)
来源:互联网 发布:手机千牛淘宝客插件 编辑:程序博客网 时间:2024/05/18 09:04
View
/** * This example shows a common site registration form. The form appears to be simple but * it shows a few special things: * 这个例子展示了一个普通的页面登录表单,这个表单看起来很简单但是他展示了一些比较特别的事儿: * - The display of field errors has been customized. Fields have `msgTarget: 'none'` so * the errors are not displayed with the individual fields; instead event listeners are * attached to the FormPanel to group up all error messages into a custom global error * indicator, with a persistent tooltip showing the error details. * field的错误提示是自定义的,fields的属性msgTarget:none,因此错误不是针对单个的field进行提示的,而是设置 * 了针对整个表单的报错。 * - The "Terms of Use" link has an event handler attached so it opens the page in a modal * Ext.Window. * 点击Terms of Use会弹出一个窗口 * - The password fields have custom validation attached to verify the user enters the * same value in both. * * - The submit button has `formBind: true` so it is only enabled when the form becomes * valid. * 提交按钮绑定了formBind:true,只有在表单有效的时候才能提交 */Ext.define('KitchenSink.view.form.CustomErrorHandling', { extend: 'Ext.form.Panel', xtype: 'form-customerrors', controller: 'form-customerrors', frame: true, width: 350, bodyPadding: 10, bodyBorder: true, title: 'Account Registration', defaults: { anchor: '100%' }, fieldDefaults: { labelWidth: 110, labelAlign: 'left', msgTarget: 'none', invalidCls: '' //unset the invalidCls so individual fields do not get styled as invalid //并没有设置invalidCls,因此单个的fields在无效的时候不会得到样式 }, /* * Listen for validity change on the entire form and update the combined error icon * 监听整个表单变化的有效性,并且联合错误图标一起更新 */ listeners: { //有效性的监听 validitychange: 'updateErrorState', //错误信息的监听 errorchange: 'updateErrorState' }, dockedItems: [{ cls: Ext.baseCSSPrefix + 'dd-drop-ok', xtype: 'container', dock: 'bottom', layout: { type: 'hbox', align: 'middle' }, padding: '10 10 5', items: [{ xtype: 'component', reference: 'formErrorState', height: '100%', invalidCls: Ext.baseCSSPrefix + 'form-invalid-icon-default', validCls: Ext.baseCSSPrefix + 'dd-drop-icon', baseCls: 'form-error-state', flex: 1, validText: 'Form is valid', invalidText: 'Form has errors', tipTpl: [ '<ul class="' + Ext.baseCSSPrefix + 'list-plain">', '<tpl for=".">', '<li><span class="field-name">{name}</span>: ', '<span class="error">{error}</span>', '</li>', '</tpl>', '</ul>' ], setErrors: function(errors) { var me = this, tpl = me.tipTpl, tip = me.tip; if (!me.tipTpl.isTemplate) { tpl = me.tipTpl = new Ext.XTemplate(tpl); } if (!tip) { tip = me.tip = Ext.widget('tooltip', { target: me.el, title: 'Error Details:', minWidth: 200, autoHide: false, anchor: 'top', mouseOffset: [-11, -2], closable: true, constrainPosition: false, cls: 'errors-tip' }); } errors = Ext.Array.from(errors); // Update CSS class and tooltip content if (errors.length) { me.addCls(me.invalidCls); me.removeCls(me.validCls); me.update(me.invalidText); tip.setDisabled(false); tip.update(tpl.apply(errors)); tip.show(); } else { me.addCls(me.validCls); me.removeCls(me.invalidCls); me.update(me.validText); tip.setDisabled(true); tip.hide(); } } }, { xtype: 'button', formBind: true, disabled: true, text: 'Submit Registration', minWidth: 140, listeners: { click: 'submitRegistration' } }] }], items: [{ xtype: 'textfield', name: 'username', fieldLabel: 'User Name', allowBlank: false, minLength: 6 }, { xtype: 'textfield', name: 'email', fieldLabel: 'Email Address', vtype: 'email', allowBlank: false }, { xtype: 'textfield', name: 'password1', fieldLabel: 'Password', inputType: 'password', style: 'margin-top: 15px', allowBlank: false, minLength: 8 }, { xtype: 'textfield', name: 'password2', fieldLabel: 'Repeat Password', inputType: 'password', allowBlank: false, /* * Custom validator implementation - checks that the value matches what was entered into * the password1 field. */ validator: function(value) { var password1 = this.previousSibling('[name=password1]'); return (value === password1.getValue()) ? true : 'Passwords do not match.' } }, /* * Terms of Use acceptance checkbox. Two things are special about this: * 1) The boxLabel contains a HTML link to the Terms of Use page; a special * click listener opens this page in a modal Ext window for convenient viewing, * and the Decline and Accept buttons in the window update the checkbox's state * automatically. *(1)boxlabel里面包含了一个html连接。有一个点击监听能够打开这个窗口,这个窗口还有两个按钮分别代表接受和拒绝。 * 2) This checkbox is required, i.e. the form will not be able to be submitted * unless the user has checked the box. Ext does not have this type of validation * built in for checkboxes, so we add a custom getErrors method implementation. * (2)如果想要提交的话。这个checkbox的勾选状态时必须的,Ext中没有这种类型情况的验证,所以我们需要添加一个自定义的getErrors的方法。 */ { xtype: 'checkboxfield', name: 'acceptTerms', reference: 'acceptTerms', fieldLabel: 'Terms of Use', hideLabel: true, margin: '15 0 0 0', boxLabel: 'I have read and accept the <a href="#" class="terms">Terms of Use</a>.', // Listener to open the Terms of Use page link in a modal window // Note that the listener method itself is defined in the ViewController // 监听器的方法是在试图控制器里面定义的 listeners: { click: { element: 'boxLabelEl', fn: 'onTermsOfUseElementClick' } }, // Custom validation logic - requires the checkbox to be checked //自定义的验证逻辑 getErrors: function() { return this.getValue() ? [] : ['You must accept the Terms of Use'] } }, { // The window is added to the form's children array to be handled // by the form's ViewController. In a more complicated case we would // probably want the window to have its own ViewController. xtype: 'window', reference: 'termsOfUseWindow', closeAction: 'hide', title: 'Terms of Use', modal: true, width: 700, height: 400, bodyPadding: '10 20', scrollable: true, // Wall of text loader: { url: 'resources/data/form/terms-of-use.html', autoLoad: true }, buttons: [{ text: 'Decline', handler: 'declineTermsOfUse' }, { text: 'Accept', handler: 'acceptTermsOfUse' }] }], beforeDestroy: function() { var error = this.lookupReference('formErrorState'); if (error) { Ext.destroy(error.tip); } this.callParent(); }});
0 0
- Ext.js5表单—(自定义错误信息)(formBind)(53)
- Ext.js5表单文本—数字(24)
- Ext.js5表单—(在mousedown的时候就进行验证)(并且显示错误信息的时候样式会自动变化)hbox的布局(47)
- Ext.js5表单—即时查询(结合Ext.Template和远程数据)(52)
- Ext.js5表单—购物车付款表(表单绑值copy)( listConfig)(43)
- Ext.js5表单的文件上传(toast)(30)
- Ext.js5小鲱鱼域(表单域)(39)
- Ext.js5表单,表格—(等级,评级)小部件(45)
- Ext.js5表单—验证vtype扩展(时间段以及密码确认)(50)
- Ext.js5表单—(triggers触发器)(baseCSSPrefix)(specialkey)利用Ext.js提供的框架创建自己的表单(查询表单)(51)
- Ext.js5表单—登录表单(40)
- Ext.js5表单—注册表单(42)
- Ext.js5的面板(2)
- Ext.js5的数组表格(3)
- Ext.js5的分组表格(4)
- Ext.js5的列冻结(5)
- Ext.js5(弹出搜索表单)(给一个面板添加数据)(34)
- Ext.js5(加载本地数据)(自定义模板完成自定义UI)(29)
- 新技能get,在ios下提示“@synthesize of ‘weak’ property is only allowed in ARC or GC mode”
- 原生JS库
- PDO异常报错处理
- js实现全选与反选
- Centos6.5部署ftp文件服务器
- Ext.js5表单—(自定义错误信息)(formBind)(53)
- asp.net mvc情况下使用jqery ajax的方法进行json数据传递
- CSS pointer-events属性
- 树 - B树的简单实现
- Collection接口和Collections类的区别
- 纯java代码布局android RadioButton 遇见的问题
- cocos2dx win32修改鼠标指针图案
- Cling魅族机子奇葩问题java.lang.NoSuchMethodError
- Android中的RecyclerView的使用(一)