Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 如何创建一个具有多种不同类型数据提供程序的通用弹出窗口?_Apache Flex_Design Patterns_Actionscript_Adobe - Fatal编程技术网

Apache flex 如何创建一个具有多种不同类型数据提供程序的通用弹出窗口?

Apache flex 如何创建一个具有多种不同类型数据提供程序的通用弹出窗口?,apache-flex,design-patterns,actionscript,adobe,Apache Flex,Design Patterns,Actionscript,Adobe,如果我有一个flex组件,它是一个普通的弹出窗口,它基本上只是一个白色的弹出窗口,我将一个名为“modules”的数组传递给它 例如: var array:Array = ["mainArticle","title"]; 或 这是两个我可以介绍的例子。第一个将我的模块添加到弹出窗口中,这样弹出窗口将用于编辑“文章”。第二个将添加信用卡更改模块,这将是一个允许用户更新其信用卡信息的表单 我的问题位于此弹出窗口的数据提供程序中。如果我正在传递文章更新程序,我需要一个包含“字体”、“颜色”、“大小”

如果我有一个flex组件,它是一个普通的弹出窗口,它基本上只是一个白色的弹出窗口,我将一个名为“modules”的数组传递给它

例如:

var array:Array = ["mainArticle","title"];

这是两个我可以介绍的例子。第一个将我的模块添加到弹出窗口中,这样弹出窗口将用于编辑“文章”。第二个将添加信用卡更改模块,这将是一个允许用户更新其信用卡信息的表单

我的问题位于此弹出窗口的数据提供程序中。如果我正在传递文章更新程序,我需要一个包含“字体”、“颜色”、“大小”等信息的数据提供程序。如果我正在传递信用卡更新程序,我需要一个包含“数字”、“安全代码”、“到期日”等信息的数据提供程序

我可以拥有一个dataProvider类,该类包含所有信息,只设置我需要的内容,但如果我执行以下操作,它可能会变得非常庞大:

public class myDataProvider {
  public var mainTextFont:String;
  public var mainTextSize:int;
  public var mainText:String;

  public var cardNumber:String;
  public var cardExpiration:Date;
  public var cardSecurity:String;
}
这是一种抽象的想法,但我正在寻找一种解决方案,允许我提供弹出式数据提供程序,而无需使用一个中央数据提供程序,该数据提供程序可以为任何可能的情况提供副本


谢谢

> P>您是否考虑使用泛型对象类并在对象中包装您需要的任何参数?

var data:Object = new Object();
data.mainTextFont = "";
data.mainTextSize= "";
data.mainText= "";
对于组件,您也可以考虑使用“状态”值来控制显示/布局。
希望这能有所帮助。

实现这一点的最简单方法是根据类创建不同的数据提供程序。我的主弹出窗口有一个“ModuleList”(自定义字符串列表),它将“modules”(不是实际的flex模块)添加到自身中,为每个模块提供正确类型的数据提供程序

public var recipientList:RecipientList;

private function setupModules():void {
  for each( var s:String in moduleList ){
    switch( s ){
      case 'recipients':
        var recipients:Recipients = new Recipients();
        recipients.list = recipientList;
        break;
      case 'article':
        // Article Logic
        break;
      case 'creditCard':
        // Credit Card Logic
        break;
    }
  }
}

这只是一个一般性的想法,我想知道做这件事的最佳方式是什么,我就是这样决定的。

不确定这是我想要的。我宁愿使用某种更具动态性的ADT,同时保留我已经习惯的命名约定。使用动态属性将允许您在保留首选命名约定的同时自由添加任何属性值。
public dynamic class myDataProvider{//any fixed properties.}
Hmm。。。我没有想过使用动态类。这很好,我想知道我将如何利用这个。。。我会想一想的。我相信你处理这件事完全错了。你试图解决一个似乎不存在的问题。。。另外,使用CSS作为样式有什么不对?我不是说我自己通过CSS显示文本。以某种方式展示它不是我所说的。如果用户将其信用卡信息输入,我需要存储该信息。如果他们正在更新信息,我需要将该信息传递到弹出窗口以预填充字段。在这种情况下,我可以为每种情况(信用卡、用户信息、文章编辑等)创建特定的弹出窗口(组件),但我更愿意使用一个加载不同模块的弹出窗口,并为每个模块提供自己的dataProvider.ookay。有不同的弹出窗口和为每个弹出窗口创建一个模块有什么区别?我怀疑你会得到什么是'重量'杠杆模块。如果有的话,只要有一个viewstack或根据情况切换的东西,所有视图都有一个数据提供程序。同样,你在制造一个不存在的问题。不,我明白你的意思。我没有问题,我要求的是一个理想的解决方案/最佳实践。我觉得我没有很好地描述这个问题。你学识渊博-我很乐意给你发电子邮件,你介意吗?(我可以从你的网站上获得)。我希望你把它保留在网站上,这样它可以帮助其他人。没有真正通用的“理想解决方案”,因为这是特定于您的项目的,但如果我是您,我会创建一个弹出式“容器”,接收数据,并根据该类型的数据(switch语句)实例化与数据相关的组件并将其添加到容器中,然后将数据添加到组件中。然后,组件可以像正常情况一样处理数据。这就是你想要的吗?
public var recipientList:RecipientList;

private function setupModules():void {
  for each( var s:String in moduleList ){
    switch( s ){
      case 'recipients':
        var recipients:Recipients = new Recipients();
        recipients.list = recipientList;
        break;
      case 'article':
        // Article Logic
        break;
      case 'creditCard':
        // Credit Card Logic
        break;
    }
  }
}