как я могу сжать это? - PullRequest
       12

как я могу сжать это?

1 голос
/ 30 августа 2011

У меня несколько наборов данных, всего около 10-15 столбцов.У меня есть числовая функция sortCompareFunction для каждого столбца.На данный момент у меня есть отдельная функция для каждого сравнения сортировки, которое я выполняю .... каждый выполняет сортировку численно.Я предполагаю, что я мог бы сжать функции sort1, sort2, sort3 и т. Д. В 1 функцию, но я не могу понять, как:

private function sort1(obj1:Object, obj2:Object):int{
var value1:Number=(obj1.zip==''||obj1.zip==null)?null:new Number(obj1.zip);
var value2:Number=(obj2.zip==''||obj2.zip==null)?null:new Number(obj2.zip);
return ObjectUtil.numericCompare(value1, value2);
}
private function sort2(obj1:Object, obj2:Object):int{
var value1:Number=(obj1.somenumbers==''||obj1.somenumbers==null)?null:new Number(obj1.somenumbers);
var value2:Number=(obj2.somenumbers==''||obj2.somenumbers==null)?null:new Number(obj2.somenumbers);
return ObjectUtil.numericCompare(value1, value2);
}
private function sort3(obj1:Object, obj2:Object):int{
var value1:Number=(obj1.morenumbers==''||obj1.morenumbers==null)?null:new Number(obj1.morenumbers);
var value2:Number=(obj2.morenumbers==''||obj2.morenumbers==null)?null:new Number(obj2.morenumbers);
return ObjectUtil.numericCompare(value1, value2);
}

...and on and on

Ответы [ 2 ]

4 голосов
/ 30 августа 2011

Одним из способов было бы создание функции для создания функций сравнения:

private function createCompareFunc(propertyName:String):Function {
   return function(obj1:Object, obj2:Object):int {
      return ObjectUtil.numericCompare(Number(obj1[propertyName]),
         Number(obj2[propertyName]));
   }
}

Затем установите функцию сравнения следующим образом для каждого столбца:

dataGridColumn1.sortCompareFunction = createCompareFunc("property1");

Пустые и пустые проверкине нужны, поскольку Number() автоматически преобразует их в 0.

1 голос
/ 30 августа 2011

Это поможет немного упростить ваш код:

private function genericSort(obj1:Object, obj2:Object,column:String):int{
var value1:Number=(obj1[column]==''||obj1[column]==null)?null:new Number(obj1[column]);
var value2:Number=(obj2[column]==''||obj2[column]==null)?null:new Number(obj2[column]);
return ObjectUtil.numericCompare(value1, value2);
}

private function sort1(obj1:Object, obj2:Object):int{
return genericSort(obj1, obj2, 'zip');
}
private function sort2(obj1:Object, obj2:Object):int{
return genericSort(obj1, obj2, 'someNumbers');
}
private function sort3(obj1:Object, obj2:Object):int{
return genericSort(obj1, obj2, 'moreNumbers');
}

И это подход, который я использовал в прошлом. К сожалению, в sortCompareFunction нет способа получить доступ к столбцу, по которому щелкают, чтобы получить свойство dataField.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...