- setValue
- onSpinUp
Source for MyNumberField.js
Ext.define('SA.view.MyNumberField', {
extend: 'Ext.form.NumberField',
alias : 'widget.mynumberfield',
initComponent: function() {
this.callParent(arguments);
},
setValue : function(v){
v = typeof v == 'number' ? v : String(v).replace(this.decimalSeparator, ".");
v = isNaN(v) ? '' : String(v).replace(".", this.decimalSeparator);
v = isNaN(v) ? '' : this.fixPrecision(String(v).replace(".", this.decimalSeparator));
return Ext.form.NumberField.superclass.setRawValue.call(this, v);
},
onSpinUp: function() {
var me = this;
if (!me.readOnly) {
var val = parseFloat(me.step);
if(me.getValue() !== '') {
val = parseFloat(me.getValue());
me.setValue((val + parseFloat(me.step)));
}
}
},
fixPrecision : function(value){
var nan = isNaN(value);
if(!this.allowDecimals || this.decimalPrecision == -1 || nan || !value){
return nan ? '' : value;
}
return parseFloat(value).toFixed(this.decimalPrecision);
}
});
Tip: If you would like to format the numberfield in some other way , then just modify the fixPrecision function. The setValue function is just checking for a valid numeric value and then calling the fixPrecision function which returns the formatted value.
Source for index.html
<html>
<head>
<title>Force Decimal Input in Forms</title>
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css">
<script type="text/javascript" src="extjs/ext-all-debug.js"></script>
<script type="text/javascript" src="app.js"></script>
</head>
<body></body>
</html>
Source for app.js
Ext.Loader.setConfig({
enabled: true
});
Ext.application({
name: 'SA',
appFolder: 'app',
controllers: [
'Samples'
],
launch: function() {
Ext.create('Ext.container.Viewport', {
layout: 'anchor',
items: [
{
xtype: 'myform',
anchor: '50% 20%'
}
]
});
}
});
Source for Edit.js
Ext.define('SA.view.Edit', {
extend: 'Ext.window.Window',
alias : 'widget.itemedit',
title : 'Edit Information',
layout: 'fit',
autoShow: true,
initComponent: function() {
this.items = this.buildItems();
this.buttons = this.buildButtons();
this.callParent(arguments);
},
buildItems: function(){
return [
{
xtype: 'form',
items: [
{
xtype: 'displayfield',
itemId: 'itemNumber',
fieldLabel: 'Item Number'
},
{
xtype: 'mynumberfield',
itemId: 'weight',
name : 'weight',
fieldLabel: 'Weight',
decimalPrecision:2,
step:0.01
}
]
}
];
},
buildButtons: function(){
return [
{
text: 'Save',
action: 'save'
},
{
text: 'Cancel',
scope: this,
handler: this.close
}];
}
});
Source for Display.js
Ext.define('SA.view.Display' ,{
extend: 'Ext.panel.Panel',
alias : 'widget.myform',
title: 'Force Decimal Input',
items: [
{
xtype: 'displayfield',
value: 'ABC',
itemId: 'itemNumber',
fieldLabel: 'Item Number'
},
{
xtype: 'displayfield',
value: 11.00,
itemId: 'weight',
fieldLabel: 'Weight'
}
],
buttons: [{
text: 'Edit',
action: 'edit'
}]
});
Source for Samples.js
Ext.define('SA.controller.Samples', {
extend : 'Ext.app.Controller',
views : ['Display','Edit','MyNumberField'],
refs: [{
ref: 'myDisplayForm',
selector: 'myform'
}],
init : function() {
this.control({
'viewport > panel' : {
render : this.onPanelRendered
},
'myform button[action=edit]' : {
click : this.editItem
},
'itemedit button[action=save]' : {
click : this.updateItem
}
});
},
onPanelRendered : function() {
console.log('The panel was rendered');
},
editItem : function(button) {
console.log('Edit button was clicked');
var panel = button.up('panel');
itemNumber = panel.getComponent('itemNumber').getValue();
weight = panel.getComponent('weight').getValue();
console.log(itemNumber);
console.log(weight);
var myWindow = Ext.widget('itemedit');
var editpanel = myWindow.down('form');
editpanel.getComponent('itemNumber').setValue(itemNumber);
editpanel.getComponent('weight').setValue(weight);
},
updateItem : function(button) {
var win = button.up('window');
form = win.down('form');
var panel = this.getMyDisplayForm();
panel.getComponent('weight').setValue(form.getComponent('weight').getValue());
win.close();
}
});



No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.