Success! Looks like we've fixed this one. According to our records the fix was applied for
EXTJS-8293
in
a recent build.
-
[4.2.0.265] Lockable mixin plugin treatment
I think the constructLockablePlugins is doing a bit too much work. It's _always_ cloning a plugin, which means it copies the config properties used in the plugin constructor. For any slightly more advanced plugin which sets itself up in the 'init' method, this doesn't work.
Original version:
Code:
constructLockablePlugins: function() {
var plugins = this.plugins,
plugin,
normalPlugin,
lockedPlugin,
topPlugins,
lockedPlugins,
normalPlugins,
i = 0, len,
destroyPlugin;
if (plugins) {
topPlugins = [];
lockedPlugins = [];
normalPlugins = [];
len = plugins.length;
for (; i < len; i++) {
plugin = plugins[i];
destroyPlugin = true;
switch (plugin.lockableScope) {
case 'both':
lockedPlugins.push(lockedPlugin = plugin.clonePlugin());
normalPlugins.push(normalPlugin = plugin.clonePlugin());
lockedPlugin.lockingPartner = normalPlugin;
normalPlugin.lockingPartner = lockedPlugin;
break;
case 'locked':
lockedPlugins.push(plugin.clonePlugin());
break;
case 'normal':
normalPlugins.push(plugin.clonePlugin());
break;
default:
destroyPlugin = false;
topPlugins.push(plugin);
}
if (destroyPlugin) {
Ext.destroy(plugin);
}
}
}
return {
topPlugins: topPlugins,
normalPlugins: normalPlugins,
lockedPlugins: lockedPlugins
};
}
Could be:
Code:
constructLockablePlugins: function() {
var plugins = this.plugins,
plugin,
normalPlugin,
lockedPlugin,
topPlugins,
lockedPlugins,
normalPlugins,
i = 0, len;
if (plugins) {
topPlugins = [];
lockedPlugins = [];
normalPlugins = [];
len = plugins.length;
for (; i < len; i++) {
plugin = plugins[i];
switch (plugin.lockableScope) {
case 'both':
lockedPlugins.push(lockedPlugin = plugin.clonePlugin());
normalPlugins.push(normalPlugin = plugin.clonePlugin());
lockedPlugin.lockingPartner = normalPlugin;
normalPlugin.lockingPartner = lockedPlugin;
break;
case 'locked':
lockedPlugins.push(plugin);
break;
case 'normal':
normalPlugins.push(plugin);
break;
default:
topPlugins.push(plugin);
}
}
}
return {
topPlugins: topPlugins,
normalPlugins: normalPlugins,
lockedPlugins: lockedPlugins
};
}
In this case, all positions are 'safe' except the 'both' version where 2 clones are used.