0

私のアプリケーションは、Flex 4 と Mate フレームワーク 0.9.1 を使用しています。マネージャーとビューの間にマッピングがある場合、PropertyInjector が 2 回起動されるという問題に直面しています。

元のコードはここでは共有しませんが、次のようになります。イベントに基づいて、MyManager のプロパティ (someData) が更新されます。プロパティ インジェクターは、ターゲット ビュー (MyView) でこの新しい値を更新します。問題は、onDataChanged が呼び出され、プロパティ someData が更新されると、ビュー内のメソッド「set someData」が 2 回起動されることです。init イベントと creationComplete イベントをデバッグしたので、ビューが 1 回だけインスタンス化されることがわかっています。MyManager のソース プロパティも、トレースに従って 1 回だけ更新されます。

これは、プロパティ インジェクタが 2 回起動されたことを示します。これがどのような条件下で発生する可能性があるか、誰にもわかりますか?任意のポインタをいただければ幸いです!

MyEventMap.mxml

    <EventHandlers type="{DataChangedEvent.GET}" debug="true">
        <MethodInvoker generator="{MyManager}" method="onDataChanged"
                   arguments="{[event.x,event.y,event.name]}">

        </MethodInvoker>
    </EventHandlers>


    <Injectors target="{MyView}" debug="true"> 
        <PropertyInjector targetKey="someData" source="{MyManager}"
                       sourceKey="someData">

        </PropertyInjector>
    </Injectors>

DataHolder.as

public class DataHolder
{
    public function DataHolder()
    {
    }
    public var x:Number;
    public var y:Number;
    public var name:String;
}

MyManager.as

public class MyManager extends EventDispatcher
{
    ....

    [Bindable] public var someData:DataHolder;

    public function onDataChanged(x:Number,y:Number,name:String):void{
        trace("dataChanged");
        var temp:DataHolder = new DataHolder();
        temp.name=name;
        temp.x=x;
        temp.y=y;
        someData = temp;    

    }
}

MyView.mxml

public function set someData(data:DataHolder):void {
    trace("setSomeData x="+data.x+",y="+data.y+",name="+data.name);
}
4

1 に答える 1

0

この問題は、BabelFX 2.0 と Mate フレームワーク 0.9.1 の組み合わせが原因であることがわかりました。以下は、BabelFX 関連のコードです。MyView を ResourceInjector のターゲットとして使用すると、それに関連するすべての PropertyInjector が 2 回起動されます。以下のコードに問題はありますか?

testLocalization.mxml:

<?xml version="1.0" encoding="utf-8"?>
<LocaleMap  enableLog="true"
        xmlns="http://l10n.babelfx.org/" 
        xmlns:mx="http://www.adobe.com/2006/mxml" 
        xmlns:factory="mx.core.*" >

<mx:Metadata>
    [ResourceBundle("testprop")]
</mx:Metadata>

<ResourceInjector bundleName="testprop" target="{MyView}">
    <ResourceSetter property="myButton.label" key="testsomething.title"/>
</ResourceInjector>

MyView.mxml (メイン アプリでもあります)

 <?xml version="1.0" encoding="utf-8"?>
 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:local="*"
           xmlns:mate="http://mate.asfusion.com/">

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
    <mate:Debugger level="{Debugger.ALL}" />
    <local:testLocalization/>
    <local:MyEventMap/>

</fx:Declarations>
<s:Button id="myButton">

</s:Button>

 </s:Application>

testprop.properties

testsomething.title = SOMETHING
于 2012-08-22T10:09:34.023 に答える