-1

我想创建一个扩展数字字段的新金额字段。我的目标是将在这个新金额字段中输入的数字格式化为 format 0,000,000.00。为了实现这一点,我重写了setValue方法parseValuenumber 字段。这按预期工作,但我在控制台中看到 javascript 错误。我检查了 Firefox 和 chrome,两者似乎都给出了不同的错误。错误似乎是在功能线上抛出me.callParent(v)setValue。代码的 JSFiddle 链接是http://jsfiddle.net/sgondhale/g88gR/

下面也是代码

Ext.define('my.view.form.AmountField', {
    extend: 'Ext.form.NumberField',
    alias: 'widget.my-amountfield',
    spinDownEnabled: false,
    spinUpEnabled: false,
    hideTrigger: true,
    baseChars: '0123456789.',
    decimalPrecision: 2,
    minValue: 0.1,
    maxValue: 9999999.99,
    emptyText: '0.00',
    maxLength: 12,
    enforceMaxLength: true,

    parseValue: function (value) {
        value = parseFloat(String(value).replace(this.decimalSeparator, ".").replace(/,/g, ""));
        return isNaN(value) ? '' : value;
    },

    setValue: function (v) {
        var me = this;
        console.log(v);
        v = typeof v == 'number' ? v : String(v).replace(this.decimalSeparator, ".").replace(/,/g, "");

        v = isNaN(v) ? '' : Ext.util.Format.number(this.fixPrecision(String(v)), "0,000,000.00");
        me.setRawValue(v);
        return me.callParent(v);
    }



});

Ext.create('Ext.form.Panel', {
    renderTo: Ext.getBody(),
    width: 300,
    bodyPadding: 10,
    items: [{
        xtype: 'my-amountfield',
        fieldLabel: 'Amount'
    }]
});

Chrome 的错误详情是

未捕获的 TypeError:Function.prototype.apply:参数列表的类型错误 ext-all.js:21

b.implement.callParent ext-all.js:21

Ext.define.setValue fiddle.jshell.net/_display/:53

Ext.define.beforeBlur ext-all.js:21

4

2 回答 2

0

报错是因为需要在方法中添加数组me.callParent,所以可以使用两个选项:

  1. me.callParent([v]);
  2. arguments[0] = v; me.callParent(arguments);

或者您可以使用超类方法调用:

me.superclass.setValue.call(me, v);

于 2013-09-20T14:24:49.240 回答
0

this.callParent(arguments)在应用任何格式然后调用之前,我发现了问题所在,应该调用this.setRawValue(value). 这是修改setValue后的代码,这是正确的做法

 setValue: function (v) {
        var me = this;
        me.callParent(v);
        v = typeof v == 'number' ? v : String(v).replace(this.decimalSeparator, ".").replace(/,/g, "");

        v = isNaN(v) ? '' : Ext.util.Format.number(this.fixPrecision(String(v)), "0,000,000.00");
        me.setRawValue(v);
    }
于 2013-09-23T20:13:06.117 回答