flex-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Harui <aha...@adobe.com>
Subject Re: [FlexJS][XML]appending XMLLists
Date Fri, 06 May 2016 18:29:26 GMT
I think I found the answer. I was thinking that

list1 += list4, which is equivalent to
list1 = list1 + list4

would just use the [[Append]] operation.  But that isn't true.  Further
down in the spec (in 11.4) it actually addresses Addition operator.  And
in there it says:

	
		
		
	
	
		
			
				
"When both AdditiveExpression and MultiplicativeExpression
evaluate to either an XML object or an XMLList, the
addition operator starts by creating a new, empty XMLList
as the return value. If the left operand evaluates to an
XML object, it is added to the return value. If the left
operand evaluates to an XMLList, each XML property of the
XMLList is added to the return value in order. Likewise,
if the right operand evaluates to an XML object, it is added
to the return value. Otherwise, if it is an XMLList each
XML property of the XMLList is added to the return value in
order."

				
			
		
	
Note the "new, empty XMLList".  So, really, it is doing:


temp = new XMLList();
temp.append(list1)
temp.append(list4);
list1 = temp;

But when you run:

xml2.a += list4, which is equivalent to
xml2.a = xml2.a + list4

It is really doing:

temp = new XMLList();
temp.append(xml2.a)
temp.append(list4);
xml2.a = temp;

Temp doesn't have TargetObject or TargetProperty, and thus in the first
example, you can see that xml2 would never be affected.

But in the second example, the reason it works is because temp is assigned
back to xml2.a with the Put operation.

So, IMO, Flash is doing the right thing.  Bizarre, but that's what the
spec says.  And why all of your other examples did what they did.

HTH,
-Alex

On 5/6/16, 1:53 AM, "Harbs" <harbs.lists@gmail.com> wrote:

>But, according to how I’m reading the spec, the following should work,
>but it doesn’t:
>
>list4 = new XMLList();
>list4[0] = <a id="1"/>;
>list4[1] = <a id="2"/>;
>list4[2] = <a id="3"/>;
>
>list1 += list4 + xml2.z;

Mime
View raw message