我想创建一个扩展数字字段的新金额字段。我的目标是将在这个新金额字段中输入的数字格式化为 format 0,000,000.00
。为了实现这一点,我重写了setValue
方法parseValue
number 字段。这按预期工作,但我在控制台中看到 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