- Возможно ли каким-то образом передать в 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.
Не придумал ничего, подскажите что-нибудь?