Extjs 4.1.1重写NumberField的setValue抛出未捕获的错误

时间:2013-09-20 08:46:26

标签: javascript extjs extjs4

我想创建一个扩展数字字段的新金额字段。我的目标是以0,000,000.00格式格式化在此新金额字段中输入的数字。为实现此目的,我已覆盖setValueparseValue方法编号字段。这是按预期工作,但我在控制台中看到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 \ text-all.js:21

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

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

2 个答案:

答案 0 :(得分:0)

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

  1. me.callParent([v]);
  2. arguments[0] = v; me.callParent(arguments);
  3. 或者你可以使用超类方法调用:

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

答案 1 :(得分: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);
    }