Показать сообщение отдельно
  #1 (permalink)  
Старый 14.10.2011, 17:01
Интересующийся
Отправить личное сообщение для Greck Посмотреть профиль Найти все сообщения от Greck
 
Регистрация: 27.07.2011
Сообщений: 27

.sort() - дополнительные аргументы?
  • Возможно ли каким-то образом передать в sort функцию не статично, а с объектом?
  • Возможно ли в функцию, вызываемую методом sort передать какие-либо дополнительные переменные, помимо сравниваемых значений?
  • Насколько нативный sort() быстрее написанного на js и быстрее ли вообще?

Описание ситуации и проблемы:

Есть самописный компонент grid.
Отдельно передаются fields и items вида:
cms3.richGrid.create({
	id: 'richGrid8',		
	container: 'div#workspace',		
	fields: {
		"id":{
			"default":null,
			"label":"ID",
			"type":"primary"
		},
		"name": {
			"default":"",
			"label":"Название",
			"type":"string"
		}
	},
	items: [{
			"id":"25",
			"name":"kint"
		},{
			"id":"28",
			"name":"test"
		},{
			"id":"1",
			"name":"database" 
	}],
});


Затем, при инициализации грида, для каждого field создается объект соответствующего типа, который дополняется пользовательскими данными:

var $ = jQuery;
var grid = this;
$.each(this.fields, function(fieldId, userField){
	field.id = fieldId;
	grid.fields[fieldId] = grid.fieldTypes[userField.type].create(userField);
});

Grid существует и полноценно работает на this, имя ссылки на объект неизвестно и, как в данном случае, ее вообще может и не быть.

Возникла проблема с сортировкой. У каждого fieldType и как следствие field может быть своя функция сортировки, потому функция передается вот так:
var field = this.getSortField();
this.items.sort(field.sort);

Проблема в том, что метод field.sort вызывается статически, в отрыве от объекта, а для сортировки нужны и другие данные, как минимум field.id.

Не придумал ничего, подскажите что-нибудь?

Последний раз редактировалось Greck, 14.10.2011 в 17:41.
Ответить с цитированием