私は作成しようとしているカスタムFlex 4+コンポーネントを持っていて、スキンにカスタムプロパティの変更を認識させる必要があります。このプロパティはボタン上のグラフィック(およびその他の視覚的な変更)を決定しますが、データはタイマーによって更新されるので絶えず変化します。Flex 4カスタムコンポーネント - プロパティの変更をスキンに通知する方法
私は例を見てきましたが、正しい構文を取得できないか、物事をどのように分けるべきかを発見できませんでした。私はcommitPropertiesとPropertyChangeEventをオーバーライドして成功しなかった。だから私は2つの質問があります。
1)バインドされたプロパティが変更されたときに、スキンに通知する方法を教えてください。
2)コンポーネントのバインドされたプロパティのデータがオブジェクトの場合、オブジェクトのプロパティが変更された場合、バインディングは正しく動作しますか(またはそれぞれのプロパティを別々に渡す方が良いでしょうか)?
ここでは、私が達成しようとしているものを切り捨てた例を示します。
コンポーネントは次のようになります。
<s:ButtonBase xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
private var _iconData:String;
[Bindable]
public function get iconData():String
{
return _iconData;
}
public function set iconData(value:String):void
{
_iconData = value;
}
]]>
</fx:Script>
私はこのようにそれを呼んでいる:
<components:MyButton id="myButton" iconData="{myData.curIconTag}" skinClass="skins.MyButtonSkin" />
私はロード可能性が異なる画像がたくさんあるので、私は、私はSetIconDisplayがアイコンを設定しているように、上/下/上/下の組み合わせなどが手に入らない状態の数を恐れていますが、実際のキーはその関数内に他のコードがあることですiconDataプロパティがX分ごとに変更されたときに実行する必要があります。
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
creationComplete="init()">
<fx:Metadata>
[HostComponent("components.MyButton")]
</fx:Metadata>
<s:states>
<s:State name="default" />
<s:State name="down"/>
<s:State name="up"/>
<s:State name="over"/>
<s:State name="disabled" />
</s:states>
<fx:Script>
<![CDATA[
import components.MyButton;
[Embed(source="images/image1.png")]
private var icon1:Class;
[Embed(source="images/image2.png")]
private var icon2:Class;
[Embed(source="images/image3.png")]
private var icon3:Class;
[Bindable]
public var hostComponent:MyButton;
[Bindable]
private var iconClass:Class;
private function init():void
{
iconClass = new Class();
}
// how do I get this called when the iconData property on my custom component is changed?
private function SetIconDisplay():void
{
switch (hostComponent.iconData)
{
case "apple":
iconClass=icon1;
break;
case "orange":
iconClass=icon2;
break;
case "grape":
iconClass=icon3;
break;
}
}
]]>
</fx:Script>
<s:BitmapImage source="{iconClass}" x="0" y="0" width="180" height="108"/>
ここでも、肌が実際にそれはおそらく(状態を使用していない)に変更されますと、それはやっているやっている方法に関する限り心配しないでください:だから肌は、このようなものです。私はバインドされたプロパティが変更されたときに特定の関数を呼び出す方法を理解しようとしています。
ありがとうございました!
はSparkSkinコードを見て、あなたはhostComponentがSparkSkinの一部ではないことがわかります。私は、ホストコンポーネントのメタデータに基づいてコンパイル時にプロパティが作成されると考えています。これは、すべてのMXMLスキンがSparkSkinを拡張し、そのスキンがhostComponentのプロパティ引数型が何であるべきかを知る方法がないため、理にかなっています。 ActionScriptのみのスキンでは、hostComponentプロパティを手動で作成する必要があります。 – JeffryHouser