ExtJS 4: построение графиков с неполным DataStore

Часто при построения графиков появляется (не то что бы) проблема не полноты данных, точнее это не проблема в jQuery а вот в ExtJS пришлось подумать…

Например, имеется у нас такое хранилище данных:

Time 1 Time 2 Time 3 Time 4
Value 1 -10 100 0 undefined
Value 2 0 undefined 59 0
Value 3 undefined undefined undefined undefined

По уму полю надо прописать тип, ну допустим float, и получаем подмену всех undefined на 0.

Получаем, вот такой график:

Screenshot from 2012 05 16 163050

 Не похоже 

Убираем тип и добавляем «defaultValue: undefined«.

Получаем вот такой график:

Screenshot from 2012 05 16 162912

Похоже но без осей выглядит не красиво….

Поискав проблему в коде, вспомнил, что Math.min от undefined и числа дает undefined.

Следовательно надо написать свою функцию нахождения минимума и максимума.

Получилось что-то такое:

Минимум

function(a) {
	var result = arguments[0]
	for(var i=1;i<arguments.length;i++)
		result = (!isNaN(result)?(!isNaN(arguments[i])?Math.min(result, arguments[i]):result):arguments[i]);
	return result;
}

Максимум

function(a) {
	var result = arguments[0]
	for(var i=1;i<arguments.length;i++)
		result = (!isNaN(result)?(!isNaN(arguments[i])?Math.max(result, arguments[i]):result):arguments[i]);
	return result;
}

Подменим на эти функции все строчки типа

...
mmin = math.min;
...
mmax = math.max;
...

Должно получится так

...
mmin = function(a) {
	var result = arguments[0]
	for(var i=1;i<arguments.length;i++)
		result = (!isNaN(result)?(!isNaN(arguments[i])?Math.min(result, arguments[i]):result):arguments[i]);
	return result;
};
...
mmax = function(a) {
	var result = arguments[0]
	for(var i=1;i<arguments.length;i++)
		result = (!isNaN(result)?(!isNaN(arguments[i])?Math.max(result, arguments[i]):result):arguments[i]);
	return result;
};
...

Посмотрим на график:

Вот так значительно лучше 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *