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;
 

Reply via email to