[pve-devel] [PATCH manager 4/6] ui: ProcessorEdit: fix total core calculation and use view model

Stefan Reiter s.reiter at proxmox.com
Wed Apr 22 15:39:08 CEST 2020


Clean up the code in ProcessorEdit with a view model and fix a bug while at
it - previously, pressing the 'Reset' button on the form would always set
the value of the total core count field to 1.

Signed-off-by: Stefan Reiter <s.reiter at proxmox.com>
---

The fix is technically only the setValues part, but I started off thinking that
using a view model would also fix it - it did not, but I still think it looks
nicer than before.

 www/manager6/qemu/ProcessorEdit.js | 65 ++++++++++++++++++------------
 1 file changed, 39 insertions(+), 26 deletions(-)

diff --git a/www/manager6/qemu/ProcessorEdit.js b/www/manager6/qemu/ProcessorEdit.js
index bc17e152..d555b2d8 100644
--- a/www/manager6/qemu/ProcessorEdit.js
+++ b/www/manager6/qemu/ProcessorEdit.js
@@ -5,28 +5,18 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
 
     insideWizard: false,
 
-    controller: {
-	xclass: 'Ext.app.ViewController',
-
-	updateCores: function() {
-	    var me = this.getView();
-	    var sockets = me.down('field[name=sockets]').getValue();
-	    var cores = me.down('field[name=cores]').getValue();
-	    me.down('field[name=totalcores]').setValue(sockets*cores);
-	    var vcpus = me.down('field[name=vcpus]');
-	    vcpus.setMaxValue(sockets*cores);
-	    vcpus.setEmptyText(sockets*cores);
-	    vcpus.validate();
+    viewModel: {
+	data: {
+	    socketCount: 1,
+	    coreCount: 1,
 	},
+	formulas: {
+	    totalCoreCount: get => get('socketCount') * get('coreCount'),
+	},
+    },
 
-	control: {
-	    'field[name=sockets]': {
-		change: 'updateCores'
-	    },
-	    'field[name=cores]': {
-		change: 'updateCores'
-	    }
-	}
+    controller: {
+	xclass: 'Ext.app.ViewController',
     },
 
     onGetValues: function(values) {
@@ -76,6 +66,16 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
 	return values;
     },
 
+    setValues: function(values) {
+	let me = this;
+
+	// set the original value here, else 'reset' clears the field
+	let totalCoreDisplay = me.lookupReference('totalcores');
+	totalCoreDisplay.originalValue = values.cores * values.sockets;
+
+	me.callParent([values]);
+    },
+
     cpu: {},
 
     column1: [
@@ -86,7 +86,10 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
 	    maxValue: 4,
 	    value: '1',
 	    fieldLabel: gettext('Sockets'),
-	    allowBlank: false
+	    allowBlank: false,
+	    bind: {
+		value: '{socketCount}',
+	    },
 	},
 	{
 	    xtype: 'proxmoxintegerfield',
@@ -95,8 +98,11 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
 	    maxValue: 128,
 	    value: '1',
 	    fieldLabel: gettext('Cores'),
-	    allowBlank: false
-	}
+	    allowBlank: false,
+	    bind: {
+		value: '{coreCount}',
+	    },
+	},
     ],
 
     column2: [
@@ -109,8 +115,11 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
 	    xtype: 'displayfield',
 	    fieldLabel: gettext('Total cores'),
 	    name: 'totalcores',
-	    value: '1'
-	}
+	    reference: 'totalcores',
+	    bind: {
+		value: '{totalCoreCount}',
+	    },
+	},
     ],
 
     advancedColumn1: [
@@ -123,7 +132,11 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
 	    fieldLabel: gettext('VCPUs'),
 	    deleteEmpty: true,
 	    allowBlank: true,
-	    emptyText: '1'
+	    emptyText: '1',
+	    bind: {
+		emptyText: '{totalCoreCount}',
+		maxValue: '{totalCoreCount}',
+	    },
 	},
 	{
 	    xtype: 'numberfield',
-- 
2.26.2





More information about the pve-devel mailing list