Как я могу сделать допускающий повторное использование labelFunction для Flex Datagrid?

Вы можете сделать это:

https://3v4l.org/AkshS

8
задан Simon_Weaver 19 November 2008 в 03:55
поделиться

2 ответа

Можно определить другую функцию, давайте назовем ее partial это связывает некоторые дополнительные аргументы Вашей функции:

function partial( func : Function, ...boundArgs ) : Function {
  return function( ...dynamicArgs ) : * {
    return func.apply(null, boundArgs.concat(dynamicArgs))
  }
}

Затем Вы изменяете свою функцию как это:

private function formatDate( dataField : String, item : Object, column : DataGridColumn ) : String {
  var df : DateFormatter = new DateFormatter();

  df.formatString = "MM/DD/YY";

  if ( column.dataField == dataField ) {
    return df.format(item[dataField]);
  }

  return "ERR";
}

Заметьте, что я добавил новый названный аргумент dataField сначала в списке аргументов, и замененный все ссылки на "startDate" с тем аргументом.

И используйте его как это:

var startDateLabelFunction : Function = partial(formatDate, "startDate");
var endDateLabelFunction   : Function = partial(formatDate, "endDate");

partial функционируйте возвращает новую функцию, которая вызывает исходную функцию с параметрами от вызова до частичного, связанного с параметрами к новой функции... Вы со мной? Другой способ поместить его состоит в том, что это может возвратить новую функцию, где N аргументов предварительно связываются с определенными значениями.

Давайте пройдем его шаг за шагом:

partial(formatDate, "startDate") возвращает функцию, которая похожа на это:

function( ...dynamicArgs ) : * {
  return func.apply(null, boundArgs.concat(dynamicArgs));
}

но func и boundArgs то, чему Вы передали как аргументы partial, таким образом, Вы могли сказать, что это похоже на это:

function( ...dynamicArgs ) : * {
  return formatDate.apply(null, ["startDate"].concat(dynamicArgs));
}

который, когда это назовут, будет более или менее тем же как этим

function( item : Object, column : DataGridColumn ) : * {
  return formatDate("startDate", item, column);
}

Tada!

11
ответ дан 5 December 2019 в 06:24
поделиться

Вы можете сделать функцию универсальной, используя атрибут dataField столбца в качестве ключа вашего элемента.

private function formatDate (item:Object, column:DataGridColumn):String
{
    var df:DateFormatter = new DateFormatter();
    df.formatString = "MM/DD/YY";

    var value:object = item[column.dataField];

    return df.format(value);
}

- Бен

14
ответ дан 5 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: