I think I may have an answer. I broke down the code into its constituent pieces and I now have a theory.
My theory: When you use (data as TestObject).b, you are actually trying to bind to the data property of the item renderer. As this is not a bindable property, you get the error. When you use the cast: TestObject(data).a, you are now binding to TestObject which does have bindable properties. Have a look at the following code... TestObject.as package { public class TestObject { [Bindable] public var item1:uint = 2; [Bindable] public var item2:uint = 3; [Bindable] public var item3:uint = 1; } } HBoxItemRenderer.as <?xml version="1.0" encoding="utf-8"?> <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script> <![CDATA[ [Bindable] private var theTestObject:TestObject; override public function set data(value:Object):void { super.data = value; if(value != null) { theTestObject = data as TestObject; } } ]]> </mx:Script> <mx:Label text="{theTestObject.item1}"/> <mx:Label text="{theTestObject.item2}"/> <mx:Label text="{theTestObject.item3}"/> </mx:HBox> DataBindingTest.mxml <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; [Bindable] private var d:ArrayCollection = new ArrayCollection([ new TestObject, new TestObject, new TestObject ]); ]]> </mx:Script> <mx:List dataProvider="{d}" itemRenderer="HBoxItemRenderer" /> <mx:Button click="for each(var o:TestObject in d) { o.item1++; o.item2++; o.item3++ }"/> </mx:Application> If anyone thinks my theory is incorrect, please chime in. HTH Steve --- In flexcoders@yahoogroups.com, Pan Troglodytes <chimpathe...@...> wrote: > > Well, I entered the two related issues as: > > https://bugs.adobe.com/jira/browse/SDK-21100 > https://bugs.adobe.com/jira/browse/SDK-21101 > > Maybe someone at Adobe can manage to reproduce them. I'm not really sure > how much harm is being done, since the code appears to work right in the > end. But someone weird and unexpected seems to be going on under the hood. > > > On Tue, May 12, 2009 at 2:39 PM, Pan Troglodytes chimpathe...@...wrote: > > > Thanks for giving me some confirmation. Now if we could just figure out > > what Alex/Adobe need to do to replicate our tests. > > > > The reason it doesn't give a warning on "y" is due to what I referenced > > (perhaps unclearly) above. Notice in the warning it tells you it can't bind > > to that value on the *itemRenderer *(GenericTest_inlineComponent1 in my > > test), not on the *TestObject* instance. The itemRenderer has an x and y > > object, so that's why it doesn't complain. It doesn't make any sense that > > it should be looking at binding to the itemRenderer instead of the > > TestObject instance, though. > > > > > > On Tue, May 12, 2009 at 12:24 PM, valdhor valdhorli...@...wrote: > > > >> > >> > >> Jason > >> > >> As a sanity check I tried it and I get the exact same error. I am using > >> Flex SDK 3.3.0 and Flash Player WIN 9,0,159,0 Debug. > >> > >> Strangely enough, changing b to y fixes it and the error goes away. Other > >> variable identifiers I have tried (Very small sample) gives the error as > >> well. > >> > >> It's got me beat. > >> > >> Why would the posted code give an error at all? > >> > >> Why would y work and everything else not? > >> > >> > >> --- In flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>, Pan > >> Troglodytes chimpathetic@ wrote: > >> > > >> > I wonder if I wasn't clear enough on this - these are run-time warnings > >> that > >> > output to the console. You don't get those? > >> > > >> > > >> > On Mon, May 11, 2009 at 5:27 PM, Alex Harui aharui@ wrote: > >> > > >> > > > >> > > > >> > > I didn't get any warnings like you did so I couldn't investigate > >> further. > >> > > > >> > > > >> > > > >> > > Alex Harui > >> > > > >> > > Flex SDK Developer > >> > > > >> > > Adobe Systems Inc. <http://www.adobe.com/> > >> > > > >> > > Blog: http://blogs.adobe.com/aharui > >> > > > >> > > > >> > > > >> > > *From:* flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>[mailto: > >> flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>] *On > >> > > Behalf Of *Pan Troglodytes > >> > > *Sent:* Saturday, May 09, 2009 10:38 PM > >> > > *To:* flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com> > >> > > *Subject:* Re: [flexcoders] using "as" breaks data binding? > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > 3.3.0. I also get it with 4.0.0.6137. Just downloaded and got it in > >> > > 6772, too. I'm using player version 10,0,12,36. Do you need to know > >> > > anything about my Flex Builder version? Let me know anything else I > >> can > >> > > provide. > >> > > > >> > > When you say you don't get it with the soon-to-be 3.4, what exactly do > >> you > >> > > mean? You just don't get the run-time warning? Did you track down why > >> it > >> > > would be okay with "x" and see if that's still doing whatever weird > >> thing it > >> > > is in 3.4? > >> > > > >> > > On Sat, May 9, 2009 at 4:11 PM, Alex Harui aharui@ wrote: > >> > > > >> > > > >> > > > >> > > Which version of Flex? I don't get it on the latest builds that will > >> ship > >> > > as 3.4 > >> > > > >> > > > >> > > > >> > > Alex Harui > >> > > > >> > > Flex SDK Developer > >> > > > >> > > Adobe Systems Inc. <http://www.adobe.com/> > >> > >> > > > >> > > Blog: http://blogs.adobe.com/aharui > >> > > > >> > > > >> > > > >> > > *From:* flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>[mailto: > >> flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>] *On > >> > > Behalf Of *Pan Troglodytes > >> > > *Sent:* Friday, May 08, 2009 11:06 PM > >> > > *To:* flexcoders > >> > > *Subject:* [flexcoders] using "as" breaks data binding? > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > I've run across some peculiar behavior and I am trying to figure out > >> if I > >> > > should report it and if so, how exactly to explain it. Given these two > >> bits > >> > > of code: > >> > > > >> > > *TestObject.as:* > >> > > package > >> > > { > >> > > public class TestObject > >> > > { > >> > > [Bindable] public var a:uint = 2; > >> > > [Bindable] public var b:uint = 3; > >> > > [Bindable] public var x:uint = 1; > >> > > } > >> > > } > >> > > > >> > > *Main Application:* > >> > > <?xml version="1.0" encoding="utf-8"?> > >> > > <Application > >> > > xmlns="http://www.adobe.com/2006/mxml" > >> > > > > >> > > <Script> > >> > > <![CDATA[ > >> > > import mx.collections.ArrayCollection; > >> > > [Bindable] public var d:ArrayCollection = new ArrayCollection([ > >> > > new TestObject, > >> > > new TestObject, > >> > > new TestObject > >> > > ]); > >> > > ]]> > >> > > </Script> > >> > > <List dataProvider="{d}"> > >> > > <itemRenderer> > >> > > <Component> > >> > > <HBox> > >> > > <Label text="{TestObject(data).a}"/> > >> > > <Label text="{(data as TestObject).b}"/> > >> > > <Label text="{(data as TestObject).x}"/> > >> > > </HBox> > >> > > </Component> > >> > > </itemRenderer> > >> > > </List> > >> > > <Button click="for each (var o:TestObject in d) { o.x++; o.a++; o.b++ > >> > > }"/> > >> > > </Application> > >> > > > >> > > If you run this application, you get the following warnings: > >> > > warning: unable to bind to property 'b' on class > >> > > 'GenericTest_inlineComponent1' > >> > > warning: unable to bind to property 'b' on class > >> > > 'GenericTest_inlineComponent1' > >> > > warning: unable to bind to property 'b' on class > >> > > 'GenericTest_inlineComponent1' > >> > > warning: unable to bind to property 'b' on class > >> > > 'GenericTest_inlineComponent1' > >> > > warning: unable to bind to property 'b' on class > >> > > 'GenericTest_inlineComponent1' > >> > > warning: unable to bind to property 'b' on class > >> > > 'GenericTest_inlineComponent1' > >> > > > >> > > There's a couple of things that stand out here. First, it doesn't > >> complain > >> > > about properties "x" or "a". The reason it doesn't complain about > >> property > >> > > "a" is that I used "TestObject(data).a" instead of "(data as > >> > > TestObject).a". If you change it to the other way around, you will get > >> a > >> > > warning on "a" as well. I find this rather bizarre, as I thought there > >> was > >> > > no functional difference to the two, other than "as" returning null if > >> the > >> > > object wasn't of the appropriate type rather than just erroring out > >> like > >> > > straight type coercion does. But type coercion/as are very (ahem) > >> "lightly" > >> > > documented so I admit I don't know a lot. But I don't think it's > >> because of > >> > > the null problem, since you can replace it with "TestObject(null).b" > >> and it > >> > > stops giving the warning. > >> > > > >> > > The second weird thing is that it doesn't complain about "x" when > >> using > >> > > "(data as TestObject).x" like it does with a. As you can see, it's > >> claiming > >> > > this error is on GenericTest_inlineComponent1. This is significant > >> > > because it appears that it's instead doing some binding to the "x" > >> property > >> > > on the item renderer, which is *very* odd. You can try this yourself > >> by > >> > > changing "x" to other strings. Ones where there is a property of HBox > >> named > >> > > the same thing won't give you a warning. Others will. > >> > > > >> > > Yet for all this griping, it seems the data binding IS working. If you > >> > > click on the button, you'll see all the labels in the list change as > >> the > >> > > data is being changed. > >> > > > >> > > So, anyone want to shed some light on these two behaviors? > >> > > > >> > > -- > >> > > Jason > >> > > > >> > > > >> > > > >> > > > >> > > -- > >> > > Jason > >> > > > >> > > > >> > > > >> > > >> > > >> > > >> > -- > >> > Jason > >> > > >> > >> > >> > > > > > > > > -- > > Jason > > > > > > -- > Jason >