Updated Branches: refs/heads/develop 6a07ef67d -> ccdbfebd4
FLEX-33874 improve binding performance Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/ccdbfebd Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/ccdbfebd Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/ccdbfebd Branch: refs/heads/develop Commit: ccdbfebd403b913c67d58b096f570d4c088fd0c1 Parents: 6a07ef6 Author: Justin Mclean <[email protected]> Authored: Sun Nov 10 09:53:24 2013 +1100 Committer: Justin Mclean <[email protected]> Committed: Sun Nov 10 09:53:24 2013 +1100 ---------------------------------------------------------------------- .../framework/src/mx/binding/Binding.as | 23 +++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/ccdbfebd/frameworks/projects/framework/src/mx/binding/Binding.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/framework/src/mx/binding/Binding.as b/frameworks/projects/framework/src/mx/binding/Binding.as index 230f42b..013c1a4 100644 --- a/frameworks/projects/framework/src/mx/binding/Binding.as +++ b/frameworks/projects/framework/src/mx/binding/Binding.as @@ -83,6 +83,7 @@ public class Binding this.destFunc = destFunc; this.destString = destString; this.srcString = srcString; + this.destFuncFailed = false; if (this.srcFunc == null) { @@ -234,6 +235,8 @@ public class Binding * @productversion Flex 3 */ mx_internal var destFunc:Function; + + mx_internal var destFuncFailed:Boolean; /** * The destination represented as a String. @@ -285,6 +288,15 @@ public class Binding while (i < (chain.length - 1)) { element = element[chain[i++]]; + //if the element does not exist : avoid exception as it's heavy on memory allocations + if (element == null || element == undefined) { + destFuncFailed = true; + if (BindingManager.debugDestinationStrings[destString]) + { + trace("Binding: destString = " + destString + ", error = 1009"); + } + return; + } } element[chain[i]] = value; @@ -401,6 +413,9 @@ public class Binding try { var result:Object = wrappedFunction.apply(thisArg, args); + if (destFuncFailed) { + return null; + } wrappedFunctionSuccessful = true; return result; } @@ -492,9 +507,11 @@ public class Binding { destFunc.call(document, value); - // Note: state is not updated if destFunc throws - lastValue = value; - hasHadValue = true; + if (!destFuncFailed) { + // Note: state is not updated if destFunc throws + lastValue = value; + hasHadValue = true; + } } } }
