`

扩展 extjs 4.2 的 NumberField 使其支持千位分隔符显示

 
阅读更多
Ext.define('BM.ux.MoneyFiled', {
    extend:'Ext.form.NumberField',
    alias: 'widget.moneyfield',
    trulyValue:null,
    setValue: function(v){
    	if(isNaN(v)){
            this.setRawValue('');
            this.trulyValue = null;
    	}else{
            this.setRawValue(this.getFormatValue(v));
            this.trulyValue = v;
    	}
    },
    getFormatValue:function(v){
        v = typeof v == 'number' ? v : Number(v);
        v = isNaN(v) ? '' : formatMoney(v);
        return v;
    },
    getSubmitValue: function() {
        return this.trulyValue;
    },
    onChange: function(v) {
        this.toggleSpinners();
        this.callParent(arguments);
        this.trulyValue = this.parseValue(v);
    },
    validateValue: function(value){
    	var num = this.parseValue(value);
        if (isNaN(num) && num.length > 0) {
            this.markInvalid(String.format(this.nanText, value));
            return false;
        }
        return Ext.form.NumberField.superclass.validateValue.call(this, num);
    },
    onBlur : function() {
       this.setValue(this.trulyValue);
    },
    onFocus:function(){
       this.setRawValue(this.trulyValue);
    },
    parseValue: function(value){
        value = parseFloat(String(value).replace(this.decimalSeparator, ".").replace(/,/g, ""));
        return isNaN(value) ? '' : value;
    },
    getErrors: function(value) {
        return Ext.form.NumberField.superclass.getErrors.call(this,this.trulyValue);
    }
});

    

/*将数字转换为千位符*/  
function formatMoney(v) {  
    if(isNaN(v)){  
        return v;  
    }  
    v = (Math.round((v - 0) * 100)) / 100;  
    v = (v == Math.floor(v)) ? v + "" : ((v * 10 == Math.floor(v * 10)) ? v  
            + "0" : v);  
    v = String(v);  
    var ps = v.split('.');  
    var whole = ps[0];  
    var sub = ps[1] ? '.' + ps[1] : '';  
    var r = /(\d+)(\d{3})/;  
    while (r.test(whole)) {  
        whole = whole.replace(r, '$1' + ',' + '$2');  
    }  
    v = whole + sub;  
      
    return v;  
}

   交互过程:在控件失去焦点的时候显示为千位符显示,鼠标移入变为正常数值显示。

   开发过程记录:
     1.重写getSubmitValue 让表单提交的时候获取的是真实的值

     2.在onChange事件中动态更新 trulyValue

     3.重写getErrors方法使得表单验证的时候获取的是真实的值

     

 

分享到:
评论

相关推荐

    extjs中的xtype的所有类型介绍

    6. tbseparator - xtype: 'tbseparator', 描述: 工具栏分隔符 7. tbtext - xtype: 'tbtext', 描述: 工具栏文本项 8. tbsplit - xtype: 'tbsplit', 描述: 工具栏分隔按钮 9. tb spacer - xtype: 'tb spacer', 描述: ...

    extjs4的Ext.frorm.Panel控件属性说明和表单控件说明

    labelSeparator :':', //分隔符 labelWidth : 50, //标签宽度 width : 150, //字段宽度 allowBlank : false, //是否允许为空 blankText : '不允许为空', labelAlign : 'left', //标签对齐方式 msgTarget...

    ExtJS基础教程.pdf

    ExtJS完全基于纯JavaScript,不依赖于任何浏览器插件,这使其能够在多种主流浏览器上无缝运行。 #### 二、ExtJS的特点 1. **跨浏览器兼容性**:ExtJS支持包括IE、Firefox、Chrome、Safari等在内的主流浏览器,确保...

    ExtJs组件类的对应表

    6. **`tbseparator`** - `Ext.Toolbar.Separator`,工具栏分隔符,用于分割工具栏上的不同部分。 7. **`tbspacer`** - `Ext.Toolbar.Spacer`,工具栏空白,用于创建固定的空白区域。 8. **`tbsplit`** - `Ext....

    ExtJs xtype一览

    - **`tbseparator` (Ext.Toolbar.Separator)**: 工具栏分隔符组件,用于分隔工具栏上的不同元素。 - **`tbspacer` (Ext.Toolbar.Spacer)**: 工具栏空白组件,用于在工具栏上留出空白区域。 - **`tbsplit` (Ext....

    ExtJS的xtype列表

    - `toolbar`: 创建工具栏,可以放置按钮、分隔符、文本等元素。 - `tbbutton`: 工具栏上的按钮。 - `tbfill`: 占位符,用于填充工具栏空间。 - `tbitem`: 工具栏的基本项,可以是任何组件。 - `tbseparator`: ...

    extJs xtype 类型

    6. **`tbseparator`:** 工具栏分隔符组件,用于在工具栏中插入分隔线,通过`Ext.Toolbar.Separator`类实现。 7. **`tbspacer`:** 工具栏空白组件,用于在工具栏中插入空白区域,通过`Ext.Toolbar.Spacer`类实现。 ...

    ExtJs_xtype一览

    - `tbseparator`:`Ext.Toolbar.Separator`,在工具栏上创建分隔符。 - `tbspacer`:`Ext.Toolbar.Spacer`,工具栏的空格。 - `tbsplit`:`Ext.Toolbar.SplitButton`,工具栏的分隔按钮。 - `tbtext`:`Ext....

    Extjs实用教程

    - **Separator**: `Ext.Toolbar.Separator`,工具栏分隔符。 - **Spacer**: `Ext.Toolbar.Spacer`,工具栏空白区域。 - **SplitButton**: `Ext.Toolbar.SplitButton`,工具栏上的分裂按钮。 - **TextItem**: `...

    Extjs xtype集合

    - **描述**: 工具栏上的分隔符。 7. **`tbspacer`:** - **`xtype`**: `tbspacer` - **`Class`**: `Ext.Toolbar.Spacer` - **描述**: 工具栏上的空白填充。 8. **`tbsplit`:** - **`xtype`**: `tbsplit` - ...

    extjs控件列表

    - **描述**: 工具栏分隔符,用于在工具栏项之间添加视觉分隔。 - **用途**: 分组工具栏上的按钮或其他项目。 **Ext.Toolbar.Spacer** - **描述**: 工具栏空白,用于创建工具栏上的空白区域。 - **用途**: 保持工具...

    Ext Js权威指南(.zip.001

    4.2 为框架顺利运行提供支持 / 107 4.2.1 平台检测工具:ext.is / 107 4.2.2 当前运行环境检测工具:ext.supports / 109 4.3 ext js的静态方法 / 112 4.3.1 概述 / 112 4.3.2 ext.object中的静态方法 / 113 ...

Global site tag (gtag.js) - Google Analytics