Threaded View
-
21 Jan 2013 10:42 AM #1Sencha - Community Support Team
- Join Date
- Nov 2007
- Location
- Helsingborg, Sweden
- Posts
- 2,455
- Vote Rating
- 50
[4.2.0.265] Lockable mixin plugin treatment
[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:
Could be: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 }; }
In this case, all positions are 'safe' except the 'both' version where 2 clones are used.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 }; }
Success! Looks like we've fixed this one. According to our records the fix was applied for
EXTJSIV-8293
in
4.2.0 Sprint 3.


Reply With Quote