Allow chained assignment to non-existent children
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/884826eb Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/884826eb Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/884826eb Branch: refs/heads/feature/amf Commit: 884826ebfb9184574a17e6cb0a9f62331a4a31be Parents: 37dc600 Author: Harbs <[email protected]> Authored: Mon Aug 28 12:54:52 2017 +0300 Committer: Harbs <[email protected]> Committed: Mon Aug 28 12:54:52 2017 +0300 ---------------------------------------------------------------------- frameworks/projects/XML/src/main/flex/XML.as | 10 +++++++ .../projects/XML/src/main/flex/XMLList.as | 31 ++++++++++++++++---- manualtests/XMLTest/src/MyInitialView.mxml | 5 ++++ 3 files changed, 41 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/884826eb/frameworks/projects/XML/src/main/flex/XML.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/XML/src/main/flex/XML.as b/frameworks/projects/XML/src/main/flex/XML.as index cf3d9ea..7e749fc 100644 --- a/frameworks/projects/XML/src/main/flex/XML.as +++ b/frameworks/projects/XML/src/main/flex/XML.as @@ -2131,6 +2131,16 @@ package { _value = value; } + + /** + * @private + * + * Allows XMLList to get the targetObject of its targetObject and not error when it gets the XML + */ + public function get targetObject():* + { + return null; + } /** * Returns an XMLList object of all XML properties of the XML object that represent XML text nodes. http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/884826eb/frameworks/projects/XML/src/main/flex/XMLList.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/XML/src/main/flex/XMLList.as b/frameworks/projects/XML/src/main/flex/XMLList.as index d90ee3d..6f8dcdd 100644 --- a/frameworks/projects/XML/src/main/flex/XMLList.as +++ b/frameworks/projects/XML/src/main/flex/XMLList.as @@ -230,6 +230,7 @@ package public function child(propertyName:Object):XMLList { var retVal:XMLList = new XMLList(); + retVal.targetProperty = propertyName.toString(); var propNum:Number = parseInt(propertyName,10); if(propNum.toString() == propertyName) { @@ -240,9 +241,12 @@ package } return retVal; } + if(isEmpty()) + { + retVal.targetObject = this; + } if(isSingle()) return _xmlArray[0].child(propertyName); - var len:int = _xmlArray.length; for (var i:int=0;i<len;i++) { @@ -783,12 +787,25 @@ package { return _targetProperty; } - - public function setAttribute(attr:*,value:String):void + private function xmlFromProperty():XML { + var xmlStr:String = "<"; + if(_targetProperty.prefix) + xmlStr += _targetProperty.prefix + "::"; + + xmlStr += _targetProperty.localName + "/>"; + return new XML(xmlStr); + } + public function setAttribute(attr:*,value:String):String + { + if(isEmpty() && targetObject)//walk up the tree and create nodes. + _xmlArray[0] = targetObject.setChild(_targetProperty,xmlFromProperty()); + var len:int = _xmlArray.length; for (var i:int=0;i<len;i++) _xmlArray[i].setAttribute(attr,value); + + return value; } public function hasAncestor(obj:*):Boolean @@ -840,11 +857,15 @@ package if(isSingle()) return _xmlArray[0].replace(propertyName,value); } - public function setChild(elementName:*, elements:Object):void + public function setChild(elementName:*, elements:Object):Object { + if(isEmpty() && targetObject)//walk up the tree and create nodes. + _xmlArray[0] = targetObject.setChild(_targetProperty,xmlFromProperty()); + if(isSingle()) _xmlArray[0].setChild(elementName,elements); - + + return elements; } public function setParent(parent:XML):void http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/884826eb/manualtests/XMLTest/src/MyInitialView.mxml ---------------------------------------------------------------------- diff --git a/manualtests/XMLTest/src/MyInitialView.mxml b/manualtests/XMLTest/src/MyInitialView.mxml index 6b73d7f..851aeac 100644 --- a/manualtests/XMLTest/src/MyInitialView.mxml +++ b/manualtests/XMLTest/src/MyInitialView.mxml @@ -103,6 +103,11 @@ limitations under the License. trace(xml1.toXMLString() == '<foo baz="true"/>'); var baz:XMLList = xml1.@baz; trace("baz: " + [email protected]() + " //true"); + var xml3:XML = <root/>; + xml3.bar.baz = "baz"; + xml3.foo.@boo = "boo"; + trace("baz? " + xml3.bar.baz); + trace("boo? " + xml3.foo.@boo); var child:XML = <pop><child name="Sam"/></pop>; xml1.appendChild(child); child = <pop><child name="George"/></pop>;
