1つの方法は、ベーステキストボックスを拡張する新しいコンポーネントを作成し、それにstoredValueのような名前のプロパティを追加し、フォーカスイベントとブラーイベントのハンドラーを登録して、保存された値を表示/編集用の10進値に変換してからコンマ形式のバージョンで、格納されている値を整数値で更新しました。
編集
仕事に戻ったばかりで、この古いコードスニペットが役立つかもしれないと考えました。しばらく前に自分で作成した通貨フィールドです。親フォームのリスナーは、更新前/更新後のイベントがあるフォームの拡張バージョンでのみ機能します。アプリケーションで必要に応じてgetValue、getSubmitValue、およびgetSubmitData関数をオーバーロードするなど、これを行うためのより良い方法がおそらくあります。私の必要性は、通貨記号とコンマを表示することだけだったので、必要に応じて変更する必要がありますが、まだ遠くないか、問題が発生している場合は、適切な開始点を提供する必要があります。幸運を。
Ext.define('Ext.ux.form.field.Currency', {
extend: 'Ext.form.field.Text',
alias: 'widget.currencyfield',
initComponent: function (config) {
this.callParent(arguments);
},
hasFocus: false,
listeners: {
render: function () {
var form = this.findParentByType('form');
form.on('afterLoadRecord', function () {
this.toRaw();
if (this.getRawValue() == 0) {
this.setRawValue('');
} else {
this.toFormatted();
}
}, this);
form.on('beforeUpdateRecord', function () {
this.toRaw();
}, this);
form.on('afterUpdateRecord', function () {
this.toRaw();
if (this.getRawValue() == 0) {
this.setRawValue('');
} else {
this.toFormatted();
}
}, this);
},
focus: function (field, e, eOpts) {
this.toRaw();
this.hasFocus = true;
},
blur: function (field, e, eOpts) {
//Clear out commas and $
this.toRaw();
//If there's a value, format it
if(field.getValue() != '') {
this.toFormatted();
this.hasFocus = false;
}
}
},
stripAlpha: function (value) {
return value.replace(/[^0-9.]/g, '');
},
toRaw: function () {
if (this.readOnly !== true) {
this.setRawValue(this.stripAlpha(this.getRawValue()));
}
},
toFormatted: function () {
this.setRawValue(Ext.util.Format.currency(this.getRawValue(), '$ ', 0));
},
getValue: function () {
return parseFloat(this.stripAlpha(this.getRawValue()));
}
});