есть панель xtype: form
она отправляет данные с полей ajax
результат отправки выглядит так:
Код:
|
method: save - это свойство добавляется отдельно оно не входит в список полей
name: Вася
age: 21
date: 21.12.2012 |
а мне нужно вот так:
Код:
|
method: save
data[name]: Вася
data[age]: 21
data[date]: 21.12.2012 |
При этом названия полей должны остаться прежними, то есть не data[name], а name.
сейчас заюзал вариант с getValues(false, true, false, true); при свойстве полей submitValue: false, но при этом формат даты отсылаемой на сервер всегда одинаков - 2012-12-21T00:00:00 так как getValues возвращает значение модели...
Моё решение выглядит так:
...
onSaveButtonClick: function(button, e, eOpts){
button.disable();
var form = button.up('form');
modifyNames(form, true); // тупа меняем название name'ов на нужные... :(
form.submit({
scope: form,
url: '/action.php',
params:{
method:'save'
},
failure: function(form, action) {
modifyNames(this, false);
button.enable();
},
success: function(form, action) {
modifyNames(this, false);
button.enable();
}
});
function modifyNames(f, action){
f.getForm().getFields().each(function(item){
if(item.submitValue && item.name){
action ? wrapInData(item) : unwrapInData(item);
if(item.multiSelect){
action ? setAsArray(item) : unsetAsArray(item);
}
}
});
}
function wrapInData(field){
field.name = 'data[' + field.name + ']';
}
function unwrapInData(field){
field.name = /^data\[([\w\d]+)\]/.exec(field.name)[1];
}
function setAsArray(field){
field.name = field.name + '[]';
}
function unsetAsArray(field){}
},
...