0

[Bindable] とラベルの更新では取得できません

これが私の 3 つのページです。リスナーが更新された var を button2.mxml に送信すると、var は更新されますが、ラベルはそれを再描画しないため、何が間違っているのか教えてください。

アプリケーション.mxml

<s:WindowedApplication 
xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:comps="components.*"  
creationComplete="init();">

<fx:Script>
    <![CDATA[
        import mx.controls.Alert;

        public function init(){
        btn1.addEventListener(MouseEvent.MOUSE_OVER, myFunction);
        }
        public function myFunction(e:MouseEvent){
            var myPage:button2 = new button2();
            var ranNum = Math.floor(Math.random() * 40) + 10;
            myPage.myValue("ABC "+ranNum);
        }
    ]]>
</fx:Script>
<comps:button1 y="0" id="btn1" width="100"/>

<comps:button2 y="100" id="btn2" width="100"/>

ボタン1.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" width="128" height="72">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:Button x="27" y="19" label="Button1" id="btn1" enabled="true"/>
</s:Group>

button2.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            [Bindable]
            public var myVal:String = "Button2";

            public function myValue(mV:String)
            {
                myVal = mV;
            }
        ]]>
    </fx:Script>
    <s:Button x="10" y="32" label="{myVal}" id="btn2" enabled="true"/>
</s:Group>
4

2 に答える 2

1

これを行う最も簡単な方法は、button2.mxml で myVal のセッターを削除し、他のパブリック変数と同じように myFunction で値を設定することです。

myPage.myVal = "ABC " + ranNum;

コードが現在機能していない理由は、myVal セッターを暗黙的にオーバーライドしており、バインディングを機能させるデータ変更イベントをディスパッチしていないためです。[Bindable] メタデータ タグを変数に追加すると、コンパイラは適切なイベント ディスパッチを使用して、その変数のセッターを自動的に生成します。

それが役立つことを願っています。

于 2011-03-14T19:30:07.553 に答える
1

あなたの機能は次のとおりです。

public function myFunction(e:MouseEvent){
    var ranNum = Math.floor(Math.random() * 40) + 10;
    btn2.myValue("ABC " + String(ranNum));
}

あなたが持っている関数では、新しいボタンを作成し(子として追加せずに)、アプリケーションで既に定義したものではなく、そのボタンにラベルを設定しています。

[Bindable]ラベルの変数も必ずしも必要ではありませんbutton2.mxmlが、これは何を達成しているかによって異なります。btn2.label = mV;代わりに、myValue()関数定義で行うこともできます。

于 2011-03-14T14:30:31.833 に答える