使用Class作为中间体,将属性从一个View更改为另一个View

时间:2011-01-10 06:54:20

标签: flex actionscript-3 binding mate

我确实提交了thread,这是(在再次阅读之后)完全错误的表述。这实际上是我想知道的:

在使用MATE的Flex应用程序中,假设我们有一个名为View.mxml的视图,其中包含一个名为ViewProp的属性和一个名为ClassManager的类,其属性为ClassProp。假设我们有另一个名为SecondView.mxml的视图,其属性为SecondProp。

是否可以以某种方式定义以下内容: 只要ViewProp发生变化(在View.mxml中),ClassProp也会在ClassManager中更改,而ClassManager又会在属性SecondProp中反映其对Secondview.mxml的更改?!

我希望这次能够正确描述它!

提前致谢

2 个答案:

答案 0 :(得分:0)

以这种方式怎么样:

当ViewProp或ClassProp发生更改时,此属性会调度一个事件,并在Secondview.mxml中添加一个eventlistener来修改属性SecondProp。

答案 1 :(得分:0)

这与你的第一个问题有点不同。

视图类必须不能直接访问模型类,因此View类必须调度一个事件来更改模型类。

1.)您必须定义某种新事件

public class ViewPropIsChangedEvent extends Event
{

  public static const SET_NEW_VALUE:String = "theNewValue";
  private var _value:Object;

  public ViewPropIsChangedEvent(type:String, value:Object, bubbling:Boolean=true, cancelable:Boolean=false)
  {
    super(type,bubbling,cancelable);
    _value = value;
  }
   public function get value():Object
  {
    return _value;
  }
}

2.。)当您在View.mxml中更改ViewProp时,您必须发送一个事件

dispatchEvent(new ViewPropIsChangedEvent(ViewPropIsChangedEvent.SET_NEW_VALUE, theNewValue))

3.)在EventMap中,你必须处理事件

</EventHandlers type="{ViewPropIsChangedEvent.SET_NEW_VALUE}"> 
  <PropertySetter generator="{ClassManager}" 
                  targetKey="ClassProp" 
                  source="{event.value}"/>
</EventHandlers>

4.。)在ModelMap中,您必须已将Secondview.SecondProp绑定到ClassManager.ClassProp

<Injectors target="{Secondview}">
   <PropertyInjector targetKey="SecondProp" 
                     source="{ClassManager}"
                     sourceKey="ClassProp"/>
</Injectors>