You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/12/09 06:17:02 UTC

[15/31] git commit: [flex-asjs] [refs/heads/develop] - fix up GenericBinding

fix up GenericBinding


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/f4008136
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/f4008136
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/f4008136

Branch: refs/heads/develop
Commit: f40081360265e01de04d75beac994ba2abbf776a
Parents: f538f2f
Author: Alex Harui <ah...@apache.org>
Authored: Wed Nov 26 15:52:34 2014 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Mon Dec 8 20:47:42 2014 -0800

----------------------------------------------------------------------
 .../org/apache/flex/binding/GenericBinding.js   | 60 +++++++++++++++-----
 1 file changed, 47 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f4008136/frameworks/js/FlexJS/src/org/apache/flex/binding/GenericBinding.js
----------------------------------------------------------------------
diff --git a/frameworks/js/FlexJS/src/org/apache/flex/binding/GenericBinding.js b/frameworks/js/FlexJS/src/org/apache/flex/binding/GenericBinding.js
index f776bd5..602942d 100644
--- a/frameworks/js/FlexJS/src/org/apache/flex/binding/GenericBinding.js
+++ b/frameworks/js/FlexJS/src/org/apache/flex/binding/GenericBinding.js
@@ -15,6 +15,7 @@
 goog.provide('org.apache.flex.binding.GenericBinding');
 
 goog.require('org.apache.flex.binding.BindingBase');
+goog.require('org.apache.flex.events.ValueChangeEvent');
 
 
 
@@ -61,8 +62,11 @@ org.apache.flex.binding.GenericBinding.prototype.set_strand =
     function(value) {
   this.destination = value;
 
-  var val = this.getValueFromSource();
-  this.applyValue(val);
+  try {
+    var val = this.getValueFromSource();
+    this.applyValue(val);
+  } catch (e) {
+  }
 };
 
 
@@ -109,8 +113,7 @@ org.apache.flex.binding.GenericBinding.prototype.getValueFromSource =
  * @param {Object} value The value from the source as specified.
  */
 org.apache.flex.binding.GenericBinding.prototype.applyValue =
-    function(value)
-    {
+    function(value) {
   if (this.destinationFunction != null)
   {
     this.destinationFunction.apply(this.document, [value]);
@@ -119,16 +122,33 @@ org.apache.flex.binding.GenericBinding.prototype.applyValue =
   {
     var arr = this.destinationData;
     var n = arr.length;
-    var obj = this.document['get_' + arr[0]]();
-    if (obj == null)
-      return;
+    var obj;
+    var getter = 'get_' + arr[0];
+    if (typeof(this.document[getter]) === 'function')
+      obj = this.document[getter]();
+    else
+      obj = this.document[arr[0]];
+    if (obj == null) {
+       this.document.addEventListener(
+           org.apache.flex.events.ValueChangeEvent.VALUE_CHANGE,
+           this.destinationChangeHandler);
+       return;
+    }
     for (var i = 1; i < n - 1; i++)
     {
-      obj = obj['get_' + arr[i]]();
+      getter = 'get_' + arr[i];
+      if (typeof(this.document[getter]) === 'function')
+        obj = obj[getter]();
+      else
+        obj = obj[arr[i]];
       if (obj == null)
         return;
     }
-    obj['set_' + arr[n - 1]](value);
+    var setter = 'set_' + arr[n - 1];
+    if (typeof(obj[setter]) === 'function')
+      obj[setter](value);
+    else
+      obj[arr[n - 1]] = value;
   }
 };
 
@@ -138,9 +158,23 @@ org.apache.flex.binding.GenericBinding.prototype.applyValue =
  * @param {Object} value The value from the source as specified.
  */
 org.apache.flex.binding.GenericBinding.prototype.valueChanged =
-    function(value)
-    {
-  var val = this.getValueFromSource();
-  this.applyValue(val);
+    function(value) {
+
+  try {
+    var val = this.getValueFromSource();
+    this.applyValue(val);
+  } catch (e) {
+  }
+};
+
+
+/**
+ * @expose
+ * @param {Object} event The change event.
+ */
+org.apache.flex.binding.GenericBinding.prototype.destinationChangeHandler =
+    function(event) {
+  if (event.propertyName == this.destinationData[0])
+    this.valueChanged(null);
 };