-1

数値フィールドを拡張する新しい金額フィールドを作成したいと考えています。私の目標は、この新しい金額フィールドに入力された数値を format でフォーマットすることです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 ext-all.js:21

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

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

4

2 に答える 2

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 に答える