我想创建一个扩展数字字段的新金额字段。我的目标是以0,000,000.00
格式格式化在此新金额字段中输入的数字。为实现此目的,我已覆盖setValue
和parseValue
方法编号字段。这是按预期工作,但我在控制台中看到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
答案 0 :(得分:0)
错误是因为您需要在me.callParent
方法中添加数组,因此您可以使用两个选项:
me.callParent([v]);
arguments[0] = v; me.callParent(arguments);
或者你可以使用超类方法调用:
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);
}