Flex Mate - 在管理器和视图之间映射时,属性注入器触发两次



我的应用程序使用 Flex 4 和 Mate 框架 0.9.1。当管理器和视图之间存在映射时,我遇到了属性注入器被触发两次的问题。

我没有在这里共享原始代码,但它看起来类似于以下内容:根据事件,更新 MyManager 中的属性 (someData)。属性注入器在目标视图 (MyView) 中更新此新值。问题是 - 当调用 onDataChanged 并更新属性 someData 时,视图中的方法"set someData"会触发两次。我知道视图只实例化一次,因为我已经调试了 init 和 creationComplete 事件。MyManager 中的源属性也仅根据跟踪更新一次。

这将指示属性注入器被触发两次。有谁知道在什么情况下会发生这种情况?任何指示将不胜感激!

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);
}

我发现问题是由于BabelFX 2.0和Mate框架0.9.1的组合造成的。下面是与BabelFX相关的代码。使用 MyView 作为 ResourceInjector 的目标会导致与其相关的所有 PropertyInjector 被触发两次。下面的代码有问题吗?

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

相关内容

  • 没有找到相关文章