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
>
>
>
>  
>

Reply via email to