2011-08-12 10 views
0

私はSparkのFlex開発には新しく、コンポーネントを構築する最良の方法を明確にしたいと考えました。私ならば、それは正しい数を示していものの、この結合式は、仕事には表示されませんFlexからのビューへのデータバインディング(Spark)

public class MyComponentView extends SkinnableComponent 
{ 
    public var selectedIndex:int = 0; 

} 

<s:Skin ...> 
    <mx:ViewStack selectedIndex="{hostComponent.selectedIndex}"> 
      .... 
    </mx:ViewStack> 
</s:Skin ...> 

は、私は、以前のViewStackの選択されたインデックスを設定するバインディング式を使用しようとしましたそのバインディング式を次のように移動します。

この作業を取得するためには、私は、このようにコードを変更:

public class MyComponentView extends SkinnableComponent 
{ 
    [SkinPart(required = "true")] 
    public var myStack:ViewStack; 

    private var _selectedIndex:int = 0; 

    private var _indexChanged:Boolean; 

    public function set selectedHistoryIndex(value:int):void 
    { 
     _selectedIndex = value; 
     _indexChanged = true; 
     invalidateProperties(); 
    } 

    override protected function partAdded(partName:String, instance:Object):void 
    { 
     super.partAdded(partName, instance); 

     switch (instance) 
     { 
      case myStack: 
       _indexChanged = true; 
       invalidateProperties(); 
       break; 
     } 
    } 

    override protected function commitProperties():void 
    { 
     super.commitProperties(); 

     if (_indexChanged && myStack) 
     { 
      _indexChanged = false; 
      myStack.selectedIndex = _selectedIndex; 
     } 
    } 

} 

<s:Skin ...> 
    <mx:ViewStack id="myStack"> 
      .... 
    </mx:ViewStack> 
</s:Skin ...> 

は、これは私がはそれを行うためにを意味してる方法ですか?

答えて

0

私にとっては、あなたの第2の方法がより好ましいです。私はむしろそれを改善するためにいくつかのコードを変更したい:

public function set selectedHistoryIndex(value:int):void 
{ 
    if (_selectedIndex == value) 
     return; 
    _selectedIndex = value; 
    _indexChanged = true; 
    invalidateProperties(); 
} 

はい、あなたは皮膚からコンポーネントのプロパティにバインドすることができますが、この方法は、スパークアーキテクチャのビュー(スキンはMVCで表示するためのもので、ホストコンポーネントは、M用であり、 C)は、良くないMについての知識を持っています。最初の実装が皮膚からのこの知識を必要とします。

2番目の実装では、ビューが真のビュー(Mによって管理)になります。それは良いです。

+0

私は今、最初のインスタンスでは機能していなかった理由は、タイミングの問題だと思っています - selectedIndexはdataproviderの前に設定されています。 – ThisRestlessPilgrim

関連する問題