1

私はActionScript/Flexにかなり慣れていないので、これが可能かどうかは完全にはわかりません。

基本的に、次のブロックがコード内で数回繰り返されています。

<s:TextInput .. \>
<s:BitmapImage .. \>

私がやろうとしているのは、ActionScriptカスタムコンポーネントを作成して、コード内のあらゆる場所で上記のブロックを次のように置き換えることができるようにすることです。

<MyBlock\>

私の最善の推測は、spark.applicationを拡張することによってこれを行う必要があるということですか?

私がこれまでに持っているもの:

package MyPackage
{
   import spark.components.Application;

   public class MyBlock extends Application
   {
     ..
   }
..
}

可能であれば、2つの既存のコンポーネントを新しいカスタムコンポーネントに組み合わせる方法について、私は完全に途方に暮れています。

次にどの程度正確に進める必要がありますか?どんな助けでもいただければ幸いです。

ありがとう、

4

1 に答える 1

1

それよりもはるかに簡単です。このユースケースでは、単に拡張する必要がありますGroup。また、作業を簡単にするために、作成したコンポーネントをMXMLで記述します。

新しいファイルMyBlock.mxml(たとえば、com/mydomain/components)を作成し、次のコードを追加します。

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark">

    <s:TextInput .. />
    <s:BitmapImage .. />
</s:Group>

ここで、このコンポーネントを使用するだけです。

<c:MyBlock />

ここで、c名前空間はxmlns:c="com.mydomain.components.*"、このクラスを使用してドキュメントのルートノードで定義されます。例えば:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark"
           xmlns:c="com.mydomain.components.*">
    <c:MyBlock />
</s:Application>

ここで、ブロックごとに異なるテキストが必要だとすると、プロパティを公開する必要があります。これを行うには、labelプロパティをMyBlock次のように追加します。

<fx:Declarations>
    <fx:String id="label" />
</fx:Declarations>

変数が変更されるたびにその変数の内容を表示するにはTextInput、次のようにバインディングを使用します。

<s:TextInput text="{label}" />

最終的なコンポーネントは次のようになります。

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark">

    <fx:Declarations>
        <fx:String id="label" />
    </fx:Declarations>

    <s:TextInput text="{label}" .. />
    <s:BitmapImage .. />
</s:Group>

MyBlockこれで、異なるテキストで複数のインスタンスを作成できます。

<c:MyBlock label="hello" />
<c:MyBlock label="world" />

MyBlockの通常の使用がリストのような方法である場合は、何度も使用するのListではなく、カスタムItemRendererでコンポーネントを使用することを検討することをお勧めしMyBlockます。

于 2012-10-03T16:25:59.490 に答える