This is an automated email from the ASF dual-hosted git repository. gregdove pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 4d9d3e3e8d4e5527806b63a5b8bf493af6934d43 Author: greg-dove <[email protected]> AuthorDate: Thu May 28 23:06:18 2020 +1200 Add flexibility for developer to control databinding support in mx.controls.Button-based mxml subclasses. Keeps original behavior, but allows users to explicitly avoid it. --- .../MXRoyale/src/main/royale/mx/controls/Button.as | 24 +++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as index 2df612c..840dd4f 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as @@ -34,6 +34,7 @@ import mx.core.UIComponent; import mx.events.FlexEvent; import org.apache.royale.binding.ItemRendererDataBinding; +import org.apache.royale.binding.DataBindingBase; import org.apache.royale.core.ITextModel; import org.apache.royale.events.Event; import org.apache.royale.events.IEventDispatcher; @@ -435,6 +436,25 @@ public class Button extends UIComponent implements IDataRenderer, IListItemRende } private var bindingAdded:Boolean; + + /** + * By default, ItemRendererDataBinding is added on-demand if an instance is used as a Drop-In Renderer + * But Button subclasses need to be able to add whatever binding support makes sense, and avoid the possibility + * of conflicting databinding support. Using this method in subclasses is one way to achieve that. + + * @param bindingImplClass a class that is a subclass of DataBindingBase + * @param init true if the bindings should be initialized immediately + */ + protected function addBindingSupport(bindingImplClass:Class, init:Boolean):void{ + if (!bindingAdded) { + if (!getBeadByType(DataBindingBase)) { + var bindingImpl:DataBindingBase = new bindingImplClass() + addBead(bindingImpl); + if (init) bindingImpl.initializeNow(); //no need to use an event in this case + } + bindingAdded = true; + } + } /** @@ -447,10 +467,8 @@ public class Button extends UIComponent implements IDataRenderer, IListItemRende if (!bindingAdded) { - addBead(new ItemRendererDataBinding()); - bindingAdded = true; + addBindingSupport(ItemRendererDataBinding, true); } - dispatchEvent(new Event("initBindings")); _data = value;
