Ext输入成功后显示对勾

如何在Ext校验成功后显示对勾鈥斺攆or <wbr>ExtJS4.1

使用ExtJS有段时间了,感觉Ext在样式上和用户体验上还有很大的提升空间。比如,在表单校验成功后显示对勾是目前比较流行的一种方式。经过我两天时间的源代码研究,终于找到了一个比较简单的实现方法。如下:

我在这里做了两件事:
1.使用'side'方式显示错误信息时,表单会缩进,我把这个效果去掉了
2.实现对勾和叹号图标的切换

注意:
我自定义了对勾的css样式,这里叫做'icon-yes'

//表单校验通过时显示对勾
//复写了Ext.layout.component.field.Field,该类用于处理表单的label和错误信息
//showValidIcon : Boolean

Ext.layout.component.field.Field.override({
 
getErrorStrategy: function() {
 var me = this,
 owner = me.owner,
 strategies = me.errorStrategies,
 msgTarget = owner.msgTarget;
   var strategy =  !owner.preventMark && Ext.isString(msgTarget) ? (strategies[msgTarget] || strategies.elementId) : strategies.none;

//给表单自定义showValidIcon:Boolean配置项
//如果showValidIcon=true,并且使用'side'方式,则使用对勾(否则是默认,不对原来的代码产生影响)
   if(msgTarget == 'side' && owner.showValidIcon){
     //初始化时不显示icon
     if(owner.isIconInit){
       owner.errorEl.setDisplayed(false);
       owner.isIconInit = true;
     }
     //一旦校验,显示icon
     owner.on('validitychange', function(me, valid){
       me.errorEl.setDisplayed(true); 
    });
     
    Ext.apply(strategy,{
     //取消缩进效果
       adjustHorizInsets : Ext.emptyFn,
       layoutHoriz : function(ownerContext, owner, size) {
         ownerContext.errorContext.setProp('x', size.width);
       },
       layoutVert: function(ownerContext, owner) {         
        ownerContext.errorContext.setProp('y', ownerContext.insets.top);
       },
       prepare : function(ownerContext, owner) {
         var errorEl = owner.errorEl;
         errorEl.addCls(Ext.baseCSSPrefix + 'form-invalid-icon');
         errorEl.set({'data-errorqtip': owner.getActiveError() || ''});
         
        var activeError = owner.getActiveError(),
     hasError = !!activeError;
     //切换对勾图标
         errorEl[hasError ? 'removeCls' : 'addCls']('icon-yes');
         
        Ext.layout.component.field.Field.initTip();     
      }   
    });
   }
 return strategy;
 }                                     
});


      使用时只需要给表单项多配置一个showValidIcon: true即可。

自己对这段代码不太满意的地方是使用了‘validitychange’事件,如果用户定义了自己的validitychange事件,执行时可能会有顺序问题。但我也是迫于无奈。ExtJS4的布局封装的太复杂了,弄不清是怎么做的。目前使用起来暂时没有问题。

如果大家有更好的实现方法,期待分享!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值