【问题标题】:Reflect property change from one View into another View using a Class as intermediate使用 Class 作为中间层将属性更改从一个 View 反映到另一个 View
【发布时间】:2011-06-06 08:59:01
【问题描述】:

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

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

是否可以以某种方式定义以下内容: 每当 ViewProp 更改(在 View.mxml 中)时,ClassProp 也会在 ClassManager 中更改,这反过来又会在属性 SecondProp 中反映其在 Secondview.mxml 中的更改?!

希望这次描述的正确!

提前致谢

【问题讨论】:

  • 您应该在问题中提到您使用 Mate
  • 感谢您的提及!我将进行编辑以反映这一点(至少我确实正确标记了它!!!:)))

标签: apache-flex actionscript-3 binding mate


【解决方案1】:

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

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

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>

【讨论】:

  • 所以如果理解正确使用两个喷油器是错误的!?是的?无论如何可行吗?让我怀疑的是:使用地图文件确实可以分离(或绑定 - 这取决于你如何看待它)彼此的属性(对我来说,这意味着它们彼此不知道)。我理解正确吗?
  • 将一个视图组件绑定到另一个视图组件存在几个问题。例如,如果您尝试注入当前未创建的类的属性(如果先创建 Secondview,Mate 将尝试将 View.ViewProp 绑定到 Secondview.econdProp,但 View 将为 null)。同样,通过某些 View 直接更改 Model 类也是违反 MVC 原则的。
  • 关于“两个注入器” - 如果您有从 View 到 Model 类的注入器:首先,它违反 MVC 原则,其次,当视图为 null 并且可能会取消绑定时,这将不起作用。跨度>
【解决方案2】:

这样怎么样:

当ViewProp或ClassProp发生变化时,该属性会派发一个事件,并在Secondview.mxml中添加一个事件监听器来修改属性SecondProp。

【讨论】:

  • 这不会违反使用MATE的原则吗?一切不应该集中保存吗? (在地图文件中)?只是问...我是 Flex 和 MATE 的新手
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
相关资源
最近更新 更多