mixin/CBind: allow binding sub elements

allow to access sub elements of configuration items for binding.

E.g., if the following configuration is present:

foo: {
    bar: true
}

one could do:

xtype: 'displayfield',
cbind {
    value: '{foo.bar}'
}
[...]

This mirrors the abillity of ExtJS's 'bind', which can do this also.
Simple implementation mirroring the surrounding code.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Thomas Lamprecht 2018-02-09 08:28:34 +01:00 committed by Wolfgang Bumiller
parent f3cf5c9bd8
commit c6f1ab1bd7

View File

@ -41,6 +41,19 @@ Ext.define('Proxmox.Mixin.CBind', {
if (match[1]) cvalue = !cvalue;
obj[prop] = cvalue;
found = true;
} else if (match = /^\{(!)?([a-z_][a-z0-9_]*(\.[a-z_][a-z0-9_]*)+)\}$/i.exec(cdata)) {
var keys = match[2].split('.');
var cvalue = getConfigValue(keys.shift());
keys.forEach(function(k) {
if (k in cvalue) {
cvalue = cvalue[k];
} else {
throw "unable to get cbind data for '" + match[2] + "'";
}
});
if (match[1]) cvalue = !cvalue;
obj[prop] = cvalue;
found = true;
} else {
obj[prop] = cdata.replace(/{([a-z_][a-z0-9_]*)\}/ig, function(match, cname) {
var cvalue = getConfigValue(cname);