You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by pi...@apache.org on 2017/01/06 23:55:22 UTC
[5/5] git commit: [flex-asjs] [refs/heads/feature/fontawesome] - Fix
bug FLEX-35239 - If in watchers map source of our data binding and event name
do not exist make ConstantBinding - If ConstantBinding during initialization
won't find in "document" sour
Fix bug FLEX-35239 - If in watchers map source of our data binding and event name do not exist make ConstantBinding
- If ConstantBinding during initialization won't find in "document" source - trying to create class from sourceID string
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/b516503b
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/b516503b
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/b516503b
Branch: refs/heads/feature/fontawesome
Commit: b516503befd2b2e4a75a5c0cf9c3bd190c51093c
Parents: fa00540
Author: piotrz <pi...@apache.org>
Authored: Sat Jan 7 00:55:12 2017 +0100
Committer: piotrz <pi...@apache.org>
Committed: Sat Jan 7 00:55:12 2017 +0100
----------------------------------------------------------------------
.../org/apache/flex/binding/ConstantBinding.as | 82 ++++++++++++++++----
.../flex/binding/ItemRendererDataBinding.as | 49 ++++--------
2 files changed, 86 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/b516503b/frameworks/projects/Binding/src/main/flex/org/apache/flex/binding/ConstantBinding.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Binding/src/main/flex/org/apache/flex/binding/ConstantBinding.as b/frameworks/projects/Binding/src/main/flex/org/apache/flex/binding/ConstantBinding.as
index 70cb124..ac3d1d6 100644
--- a/frameworks/projects/Binding/src/main/flex/org/apache/flex/binding/ConstantBinding.as
+++ b/frameworks/projects/Binding/src/main/flex/org/apache/flex/binding/ConstantBinding.as
@@ -21,7 +21,11 @@ package org.apache.flex.binding
import org.apache.flex.core.IBead;
import org.apache.flex.core.IStrand;
import org.apache.flex.core.IDocument;
-
+
+ COMPILE::SWF
+ {
+ import flash.utils.getDefinitionByName;
+ }
/**
* The ConstantBinding class is lightweight data-binding class that
* is optimized for simple assignments of one object's constant to
@@ -126,17 +130,53 @@ package org.apache.flex.binding
*/
public function set strand(value:IStrand):void
{
+ var val:* = null;
+ var objectFromWindow:Object = null;
+
if (destination == null)
destination = value;
if (sourceID != null)
- source = document[sourceID];
+ {
+ source = document[sourceID];
+ }
else
+ {
source = document;
- var val:*;
- if (sourcePropertyName in source)
+ }
+
+ if (!source)
+ {
+ try
+ {
+ COMPILE::SWF
+ {
+ var classFromSourceId:Class = getDefinitionByName(sourceID) as Class;
+ if (classFromSourceId)
+ {
+ val = classFromSourceId[sourcePropertyName];
+ }
+ }
+
+ COMPILE::JS
+ {
+ objectFromWindow = getObjectClassFromWindow(sourceID);
+ if (objectFromWindow)
+ {
+ val = objectFromWindow[sourcePropertyName];
+ }
+ }
+ destination[destinationPropertyName] = val;
+ }
+ catch (e:Error)
+ {
+
+ }
+ }
+ else if (sourcePropertyName in source)
{
- try {
+ try
+ {
val = source[sourcePropertyName];
destination[destinationPropertyName] = val;
}
@@ -146,7 +186,8 @@ package org.apache.flex.binding
}
else if (sourcePropertyName in source.constructor)
{
- try {
+ try
+ {
val = source.constructor[sourcePropertyName];
destination[destinationPropertyName] = val;
}
@@ -164,13 +205,11 @@ package org.apache.flex.binding
if (cname)
{
cname = cname.names[0].qName;
- var parts:Array = cname.split('.');
- var n:int = parts.length;
- var o:Object = window;
- for (var i:int = 0; i < n; i++) {
- o = o[parts[i]];
+ objectFromWindow = getObjectClassFromWindow(cname);
+ if (objectFromWindow)
+ {
+ val = objectFromWindow[sourcePropertyName];
}
- val = o[sourcePropertyName];
destination[destinationPropertyName] = val;
}
}
@@ -190,6 +229,23 @@ package org.apache.flex.binding
{
this.document = document;
}
-
+
+ COMPILE::JS
+ private function getObjectClassFromWindow(className:Object):Object
+ {
+ var windowObject:Object = window;
+ var parts:Array = className.split('.');
+ var n:int = parts.length;
+ if (n == 0)
+ {
+ return null;
+ }
+
+ for (var i:int = 0; i < n; i++) {
+ windowObject = windowObject[parts[i]];
+ }
+
+ return windowObject;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/b516503b/frameworks/projects/Binding/src/main/flex/org/apache/flex/binding/ItemRendererDataBinding.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Binding/src/main/flex/org/apache/flex/binding/ItemRendererDataBinding.as b/frameworks/projects/Binding/src/main/flex/org/apache/flex/binding/ItemRendererDataBinding.as
index ac54206..315a372 100644
--- a/frameworks/projects/Binding/src/main/flex/org/apache/flex/binding/ItemRendererDataBinding.as
+++ b/frameworks/projects/Binding/src/main/flex/org/apache/flex/binding/ItemRendererDataBinding.as
@@ -72,7 +72,6 @@ package org.apache.flex.binding
var fieldWatcher:Object;
var isStatic:Boolean;
var sb:SimpleBinding;
- var cb:ConstantBinding;
if (!("_bindings" in _strand))
return;
var bindingData:Array = _strand["_bindings"];
@@ -92,8 +91,9 @@ package org.apache.flex.binding
var watchers:Object = decodeWatcher(bindingData.slice(index));
for (i = 0; i < n; i++)
{
- binding = bindings[i];
+ binding = bindings[i];
var destination:IStrand;
+
if (binding.source is String)
{
fieldWatcher = watchers.watcherMap[binding.source];
@@ -130,12 +130,16 @@ package org.apache.flex.binding
else if (binding.source is Array
&& binding.source.length == 2 && binding.destination.length == 2)
{
- var compWatcher:Object;
- compWatcher = watchers.watcherMap[binding.source[0]];
- fieldWatcher = compWatcher.children.watcherMap[binding.source[1]];
- if (binding.source[0] == "data" ||
- (compWatcher.eventNames is String
- && compWatcher.eventNames == "dataChange"))
+ var compWatcher:Object = watchers.watcherMap[binding.source[0]];
+ if (compWatcher)
+ {
+ fieldWatcher = compWatcher.children.watcherMap[binding.source[1]];
+ }
+
+ if (compWatcher && fieldWatcher &&
+ (binding.source[0] == "data" ||
+ (compWatcher.eventNames is String &&
+ compWatcher.eventNames == "dataChange")))
{
var irsb:ItemRendererSimpleBinding = new ItemRendererSimpleBinding();
irsb.destinationID = binding.destination[0];
@@ -144,7 +148,7 @@ package org.apache.flex.binding
irsb.setDocument(_strand);
_strand.addBead(irsb);
}
- else if (fieldWatcher.eventNames is String)
+ else if (fieldWatcher != null && fieldWatcher.eventNames is String)
{
sb = new SimpleBinding();
sb.destinationPropertyName = binding.destination[1];
@@ -170,36 +174,17 @@ package org.apache.flex.binding
}
}
}
- else if (fieldWatcher.eventNames == null)
+ else if (fieldWatcher == null || fieldWatcher.eventNames == null)
{
- cb = new ConstantBinding();
- cb.destinationPropertyName = binding.destination[1];
- cb.sourceID = binding.source[0];
- cb.sourcePropertyName = binding.source[1];
- cb.setDocument(_strand);
- destObject = _strand[binding.destination[0]];
- destination = destObject as IStrand;
- if (destination)
- destination.addBead(cb);
- else
- {
- if (destObject)
- {
- cb.destination = destObject;
- _strand.addBead(cb);
- }
- else
- {
- deferredBindings[binding.destination[0]] = cb;
- IEventDispatcher(_strand).addEventListener("valueChange", deferredBindingsHandler);
- }
- }
+ makeConstantBinding(binding, _strand);
}
}
else
{
makeGenericBinding(binding, i, watchers);
}
+
+ fieldWatcher = null;
}
}