如何创建可以包含许多不同类型的数据提供程序的常规弹出窗口?

时间:2011-05-09 15:08:40

标签: flex design-patterns actionscript adobe

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

例如:

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

var array:Array = ["creditCard"];

这是我可能传入的两个示例。第一个是将我的模块添加到弹出窗口,因此弹出窗口将用于编辑“文章”。第二个是添加信用卡更改模块,该模块将允许用户更新其信用卡信息。

我的问题在于此弹出窗口的dataProvider。如果我在文章更新程序中传递,我需要一个dataProvider,其中包含“font”,“color”,“size”等信息。如果我传递信用卡更新程序,我需要一个包含“i”等信息的dataProvider号码,“”证券代码,“”到期日期“等。

我可以拥有一个包含所有信息的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;
}

这是一种抽象的想法,但我正在寻找一种解决方案,它允许我在不使用一个中心dataProvider的情况下为弹出式数据提供者提供一个可能具有每种可能情况的副本。

谢谢!

2 个答案:

答案 0 :(得分:0)

解决此问题的最简单方法是根据类创建不同的dataProviders。我的主要弹出窗口有一个" ModuleList" (自定义字符串列表),它添加"模块" (不是实际的flex模块)本身,为每个人提供正确类型的dataProvider。

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

这只是一个通用的想法,我想知道最好的方法是什么,这就是我决定接近它的方式。

答案 1 :(得分:-1)

您是否考虑使用通用Object类并在Object中包装您需要的任何参数?

var data:Object = new Object();
data.mainTextFont = "";
data.mainTextSize= "";
data.mainText= "";

对于组件,您还可以考虑使用“State”值来控制显示/布局。

希望这有帮助。