I think that might be a distraction, I was asking a question about the rules of MXML, rather than asking for debugging help for my non-visual component.
But just for fun, I'll explain! I was looking for a way to reuse the nice way that PopUpButton manages its pop-up, so I created a non-visual component that you could use to orchestrate "popping up" on rollover or on focus. <mx:Label id="info" text="Roll over me for more information"/> <mx:VBox id="moreInfo" includeInLayout="false" visible="false"> <mx:Label text="Hi, I'm more information!" /> </mx:Vbox> <my:DetailPopup target="{info}" popUp="{moreInfo}"/> This works really well, and we use it in a few places so we can use ad hoc detail pop-ups. We've even used it inside a datagrid item renderer: <mx:DataGridColumn> <mx:itemRenderer><mx:Component> <mx:Label id="info" text="Roll over me for more information"/> <mx:VBox id="moreInfo" includeInLayout="false" visible="false"> <mx:Label text="Hi, I'm more information!" /> </mx:Vbox> <my:DetailPopup target="{info}" popUp="{moreInfo}"/> </mx:Component></mx:itemRenderer> </mx:DataGridColumn> When we switched to a grid with a repeater, I discovered the prohibition on nonvisual components that weren't parent of the root tag. <mx:GridItem> <mx:Label id="info" text="Roll over me for more information"/> <mx:VBox id="moreInfo" includeInLayout="false" visible="false"> <mx:Label text="Hi, I'm more information!" /> </mx:Vbox> (x) <my:DetailPopup target="{info}" popUp="{moreInfo}"/> </mx:GridItem> So the solution appears to be to take the guts and put it in its own component definition, and then do this: <mx:GridItem> <my:WholeChunkaStuff/> </mx:GridItem> Michael On Fri, Dec 12, 2008 at 1:25 PM, Rick Winscot <rick.wins...@zyche.com>wrote: > It's difficult to determine what your problem is without knowing a > little more about what your DetailPopUp does/is. If you post some code it > would be far easier to determine why one context works and another doesn't. > Generally... I wouldn't recommend mingling non-visual and visual components > in mxml. > > Your error basically says that your non-visual component doesn't have an > appropriate interface for the context you are placing it in. e.g. It should > be a IUIComponent. > > http://livedocs.adobe.com/flex/201/langref/mx/core/IUIComponent.html > > Rick Winscot > > > > On 12/12/08 12:49 PM, "Michael Prescott" <michael.r.presc...@gmail.com> > wrote: > > > > > *Short version: > * > I have a non-visual component that I'm trying to declare in a repeater, but > it seems that MXML doesn't allow this. Is this true? How do you get around > this, create a visual component to wrap the non-visual component? > > *Long version: > * > I have an ActionScript non-visual component whose declaration looks like > this: > > public class DetailPopup extends EventDispatcher implements IMXMLObject > > I've used this successfully inside an inline, MXML item renderer, like > this: > > <mx:DataGridColumn> > <mx:itemRenderer> > <mx:Component> > <mx:VBox> > > <!-- a bunch of other stuff, and then my: --> > > <my:DetailPopUp/> > > <mx:VBox> > </mx:Component> > </mx:itemRenderer> > </mx:DataGridColumn> > > > Now that I'm switching from a DataGrid to a Grid, the code ought to look > like this: > > <mx:GridItem> > <mx:VBox> > > <!-- a bunch of other stuff, and then my: --> > > (X) <my:DetailPopUp/> > > <mx:VBox> > </mx:GridItem> > > ..except that I'm getting an error, "Component declarations are not allowed > here. (Note: visual children must implement IUIComponent.)" > > After trying out a bunch of scenarios, it looks like non-visual components > can only be declared in the outermost scope of a component or application. > Is this true? This is rather awkward, as I need a DetailPopUp for each > griditem. > > Any tips would be very helpful! > > Michael > > > > >