Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   form: Как обернуть данные на отправку? (https://javascript.ru/forum/extjs/37601-form-kak-obernut-dannye-na-otpravku.html)

constantant 26.04.2013 15:24

form: Как обернуть данные на отправку?
 
есть панель 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 возвращает значение модели...:help: :help: :help: :help: :help: :help: :help: :help:




Моё решение выглядит так:
...
	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){}
	},
...

skrudjmakdak 29.04.2013 14:22

я думаю как вы хотите врятли получится, либо отдельно аяксом
http://docs.sencha.com/extjs/4.2.0/#!/api/Ext.Ajax

constantant 30.04.2013 12:23

Цитата:

Сообщение от skrudjmakdak
я думаю как вы хотите врятли получится, либо отдельно аяксом

да уж... а не подскажите, как работать с api для форм? может через него можно что-то придумать?

skrudjmakdak 30.04.2013 16:13

что значит как работать? на оф сайте есть примеры.. самое элементарное можно понять вот ссылка:
http://docs.sencha.com/extjs/4.1.3/#...Ext.form.Panel

вот там есть параметр name, вот чему намэ равен так и обращаться к нему на сервере (например get)
...
name: 'myparam'
...
$_GET['myparam']

constantant 04.05.2013 21:17

про что вы говорите? я имел в виду api: http://docs.sencha.com/extjs/4.2.0/#....Basic-cfg-api

constantant 14.05.2013 15:57

добавил своё решение "в лоб"...


Часовой пояс GMT +3, время: 07:36.