You are not tackling this right.

The component does not create the title bar as a child.
The skin will do that.

Check this out:

(1) Do the component in ActionScript. Declare the expected elements that the 
skin will define as variables. Define their behaviors and properties in the 
partAdded function.

package com.mycompany {
[SkinState("normal")]

public class HostComponent extends SkinnableContainer
{
    [SkinPart(required="false")]
    public var titleBar:IReportTitleBar

    override protected function partAdded(partName:String,instance:Object):void
  {
    if (instance == titleBar)
   {
        titleBar.label = "My Label";
        // or use Binding: 
BindingUtils.bindPropert(titleBar,"label",this,titleBarLabel);
    }
  }
}

  // don't forget the partRemoved function, too

}

(2) Then, the skin only defines the titleBar using convenient MXML.

<s:SparkSkin >
  <fx:Metadata>
    [HostComponent("com.mycompany.HostComponent")] 
  </fx:Metadata>
        <s:states>
                <s:State name="normal"/>
        </s:states>
        <controls:DCDocTitleBar id="titleBar" />
</s:SparkSkin>



--- In flexcoders@yahoogroups.com, "amiller.demandlending" <amil...@...> wrote:
>
> Hi Everyone,
> 
> I have a sub-component which uses a String binding on a Label. The bindings 
> works fine if I do not use a skinClass on the host component. If I do use a 
> SparkSkin, my bindings do not execute on the sub-component. Instead, I get 
> the value which I initialized it to.
> 
> Am I doing something wrong, or is this expected behavior?
> 
> If this is expected behavior, then what is the purpose of a SparkSkin if I 
> have to explicitly redeclare all my control code in the skin?
> 
> I could just be misunderstanding the intended usage, but from what I 
> understood in the docs it seems like a very powerful new feature.
> 
> Would anyone be able to enlighten me on the topic a bit more?
> 
> 
> Here is the trimmed code for my host/sub
> 
> Host Component
> ----
> <s:SkinnableContainer skinClass="demand.skins.DSDoc" >
>       <fx:Metadata>
>               [SkinState("normal")]
>       </fx:Metadata>
>       <fx:Script>
>               <![CDATA[       
>                       [SkinPart(required="false")]
>                       public var titleBar:IReportTitleBar
>                       
>                       override protected function createChildren():void
>                       {
>                               if (!_titleBar)
>                               {
>                                       _titleBar = new DCDocTitleBar();
>                                       
> this.addElementAt(IVisualElement(_titleBar), 0);
>                               }
>                               super.createChildren();
>                       }
>               ]]>
>       </fx:Script>
> </s:SkinnableContainer>
> ---
> 
> The title bar sub-component
> ----
> <s:SkinnableContainer >
>       <fx:Script>
>               <![CDATA[
>                       [Bindable]
>                       public var label:String="Incorrect Label";
>               ]]>
>       </fx:Script>
>       <s:Label text="{this.label}"/>
> </s:SkinnableContainer>
> ----
> 
> The host component skin
> ----
> <s:SparkSkin >
>       <fx:Metadata>
>               [HostComponent("demand.reports.DRDoc")] 
>       </fx:Metadata>
>       <s:states>
>               <s:State name="normal"/>
>       </s:states>
>       <controls:DCDocTitleBar id="titleBar" />
> </s:SparkSkin>
> ----
> 
> 
> Thanks in advance!
> 
> ~Aaron
>


Reply via email to