Как создать общее всплывающее окно, которое может иметь много разных типов провайдеров данных? - PullRequest
1 голос
/ 09 мая 2011

Если у меня есть Flex-компонент, который является обычным всплывающим окном, то я просто передаю массив с именем «modules».

Например:

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

или

var array:Array = ["creditCard"];

Это два примера, которые я мог бы привести. Первый - это добавление моих модулей во всплывающее окно, чтобы оно использовалось для редактирования «статьи».Второй добавит модуль «Замена кредитной карты», который будет формой, которая позволит пользователю обновлять данные своей кредитной карты.

Мой вопрос находится в dataProvider для этого всплывающего окна.Если я передаю программу обновления статьи, мне нужен dataProvider, который содержит такую ​​информацию, как «шрифт», «цвет», «размер» и т. Д. Если я передаю программу обновления кредитной карты, мне нужен 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 голосов
/ 13 мая 2011

Самый простой способ сделать это - создать разных провайдеров данных в зависимости от класса.У моего основного всплывающего окна есть «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;
    }
  }
}

Этопросто общая идея, мне было интересно, как лучше всего это сделать, и именно так я решил подойти к ней.

0 голосов
/ 09 мая 2011

Не могли бы вы использовать универсальный класс Object и обернуть любой нужный вам параметр в Object?

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

Для компонента вы также можете использовать значение «State» для управления отображением / макетом.

Надеюсь, это поможет.

...