| 
 submit textfield + grid in ExtJS Имеется на одной форме: 1) текстовые поля (textfield), чекбоксы, ... 2) Ext.grid.Panel 3) Ну и кнопочка "submit", её код: 
buttons: [
 {
  text: "Save",
  handler:
  function () {
   PanelData.submit({
    waitMsg: lanLoading,
    url: "Handlers/...",
    success: function (form, action) { ... },
    failure: function (form, action) { ... }
   });
  }
 }
]
Задача: отправить все данные одним потоком на сервак и с текстовых полей и с Грида. На сервере получаю данные только с тектовых полей, а вот данные Грида не приходят ... Прошу Вашей помощи! | 
| 
 Цитата: 
 | 
| 
 Первый Вариант (похожий на него) практически реализовал ... Но вот второй - мне больше по душе ... ))) А, разве, нет более легкого решения, что бы одной кнопочкой 2-х или более зайцев ... ??? | 
| 
 Цитата: 
 Цитата: 
 | 
| 
 Подскажите, пожалуйста, уважаемый Ex_Soft !!! Возможно ли сохраненить данных грида и получить ответ от сервера, типа такого: 
store.sync({
 success: function (form, action) {
  //...
 },
 failure: function (form, action) {
  //...
 }
});
Возможно лди такое ??? Тут пишут, что НЕТ: http://www.sencha.com/forum/archive/...t-149887.html? Может за пол года что-то поменялось ??? | 
| 
 Цитата: 
 Цитата: 
 Все ж доступно: Ext.data.AbstractStore.sync() 
if (needsSync && me.fireEvent('beforesync', operations) !== false) {
            options = options || {};
            *!* me.proxy.batch */!* (Ext.apply(options, {
                operations: operations,
                listeners: me.getBatchListeners()
            }));
        }
Ext.data.proxy.Proxy.batch() "...i так далi..." Посмотрев по диагонали, соглашусь с Цитата: 
 | 
| 
 Ex_Soft, ext-4.1 уже умеет принимать ответ с сервера. 
store.sync({
 success: function () {
  Ext.Msg.alert("Сообщение", "Сохранено !!!");
 },
 failure: function () {
  Ext.Msg.alert("Сообщение", "Ошибка !!!");
 }
});
Вот только записи передаются при одном условии - если были какие-то изменения, да и в придачу асинхронно: 1) Новые 2) Удалённые 3) Изменённые В отличии от 4.0.7 - там всё передавал одним запросом и пофигу, были изменения или нет. Одно добавили а 10 убрали ... | 
| 
 Цитата: 
 
onBatchComplete: function(batchOptions, batch) {
        var scope = batchOptions.scope || this;
        if (batch.hasException) {
            if (Ext.isFunction(batchOptions.failure)) {
                Ext.callback(batchOptions.failure, scope, [ *!* batch, batchOptions */!* ]);
            }
        } else if (Ext.isFunction(batchOptions.success)) {
            Ext.callback(batchOptions.success, scope, [ *!* batch, batchOptions */!* ]);
        }
        if (Ext.isFunction(batchOptions.callback)) {
            Ext.callback(batchOptions.callback, scope, [ *!* batch, batchOptions */!* ]);
        }
    }
и Ваша хотелка: Цитата: 
 Цитата: 
 
sync: function(options) {
        var me = this,
            operations = {},
            toCreate = me.getNewRecords(),
            toUpdate = me.getUpdatedRecords(),
            toDestroy = me.getRemovedRecords(),
            needsSync = false;
        if (toCreate.length > 0) {
            operations.create = toCreate;
            needsSync = true;
        }
        if (toUpdate.length > 0) {
            operations.update = toUpdate;
            needsSync = true;
        }
        if (toDestroy.length > 0) {
            operations.destroy = toDestroy;
            needsSync = true;
        }
        if ( *!* needsSync */!* && me.fireEvent('beforesync', operations) !== false) {
            options = options || {};
            me.proxy.batch(Ext.apply(options, {
                operations: operations,
                listeners: me.getBatchListeners()
            }));
        }
        
        return me;
    },
Цитата: 
 Цитата: 
 | 
| 
 Цитата: 
 
store.proxy.extraParams.ParamTextField01 = "XXX01";
store.proxy.extraParams.ParamTextField02 = "XXX02";
store.save({
 //Надо обязательно получить ответ: сохранило или же нет.
 });
Параметры - это Шапка: ТекстФилд, ЧексБоксы, КомбоБоксы, ..., их определённое количество (оно не меняется). Грид - табличная часть, количество меняется. Цитата: 
 Могу видео на ЮТуб закинуть ... Код такой: 
<script type="text/javascript" src='http://dev.sencha.com/deploy/ext-4.0.7-gpl/ext-all.js'></script>
<link rel="stylesheet" href="http://dev.sencha.com/deploy/ext-4.0.7-gpl/resources/css/ext-all.css" />
....
// *** *** *** МОДЕЛЬ *** *** *** 
Ext.define('BarCode', { extend: 'Ext.data.Model', fields: ...
// *** *** *** ХРАНИЛИЩЕ *** *** *** 
var storeGridBarCode = Ext.create('Ext.data.JsonStore', {
 restful: true,
 pageSize: 40,
 model: 'BarCode',
 proxy: {
  type: 'rest', //'ajax',
  batchActions: true,
  url: "Handlers/DirGrid.ashx?pID=BarCode",
  reader: { type: "json", successProperty: 'success', root: "BarCode",  messageProperty: 'message' },
  writer: { type: "json", encode: false, root: "BarCode" }
 }
}); storeGridBarCode.load();
var rowEditing = Ext.create('Ext.grid.plugin.RowEditing');
// *** *** *** П-Е *** *** *** 
var PanelGridBarCode = Ext.create("Ext.grid.Panel", {
 autoScroll: true,
 store: storeGridBarCode,
 columns: [{...} ],
 plugins: [rowEditing],
 bbar: new Ext.PagingToolbar({ store: storeGridBarCode, displayInfo: true, displayMsg: 'Showing  {0} - {1} of {2}'}),
 dockedItems: [ 
  { xtype: 'toolbar', items: [ 
   { text: 'Add', handler: function () { storeGridBarCode.insert(0, new BarCode()); rowEditing.startEdit(0, 0);  }},
  '-',
   { itemId: 'delete', text: 'Delete', disabled: true, handler: function () { var selection = PanelGridBarCode.getView().getSelectionModel().getSelection()[0]; if (selection) { storeGridBarCode.remove(selection); } } }
  ]
 }
 ]
});
PanelGridBarCode.getSelectionModel().on('selectionchange', function (selModel, selections) { PanelGridBarCode.down('#delete').setDisabled(selections.length === 0); });
//Сохранение:
storeGridBarCode.getProxy().url = "Handlers/..."; //Меняем УРЛ
//Параметры Шапки
store.proxy.extraParams.ParamTextField01 = "XXX01";
store.proxy.extraParams.ParamTextField02 = "XXX02";
storeGridBarCode.sync({ ... });
Под 4.0.7 - отсылаются на Сервер все данные сразу, кроме приёма клиентом ответа с сервера ((( Под 4.1.0 - есть приём клиентом ответа с сервера, но отсылаются на Сервер данные по частям ((( 4.1.0: <script type="text/javascript" src='http://dev.sencha.com/deploy/ext-4.1.0-gpl/ext-all.js'></script> <link rel="stylesheet" href="http://dev.sencha.com/deploy/ext-4.1.0-gpl/resources/css/ext-all.css" /> | 
| 
 Цитата: 
 Цитата: 
 
Ext.onReady(function() {
	if(window.console && console.clear)
		console.clear();
	if(window.console && console.log)
		console.log("core: %s, extjs: %s", Ext.versions.core.version, Ext.versions.extjs.version);
	var
		extraParamField = Ext.create("Ext.form.field.Text", {
			value: "extraParamValue"
		}),
		store = Ext.create("Ext.data.Store", {
			fields: [
				{ name: "id", type: "int" },
				"name"
			],
			proxy: {
				type: "ajax",
				url: "handler.ashx"
			},
			listeners: {
				beforesync: function(options, eOpts) {
					this.getProxy().extraParams = {
						extraParamValue: extraParamField.getValue()
					};
				}
			},
			data: [
				{ id: 1, name: "Record# 1" },
				{ id: 2, name: "Record# 2" },
				{ id: 3, name: "Record# 3" },
				{ id: 4, name: "Record# 4" }
			]
		}),
		grid = Ext.create("Ext.grid.Panel", {
			store: store,
			columns: [
				{ dataIndex: "id", header: "id", editor: { xtype: "numberfield" }, flex: 1 },
				{ dataIndex: "name", header: "name", editor: { xtype: "textfield" }, flex: 1 }
			],
			plugins: [
				Ext.create("Ext.grid.plugin.CellEditing", {
					clicksToEdit: 2
				})
			],
			tbar: [{
				text: "Add",
				handler: function(btn, e) {
					store.add(Ext.create(store.getProxy().getModel(), { name: "blah-blah-blah" }));
				}
			}, {
				text: "Del",
				handler: function(btn, e) {
					var
						grid,
						sm,
						sel;
					if(!(grid=btn.up("grid"))
						|| !(sm=grid.getSelectionModel())
						|| !(sel=sm.selected)
						|| !sm.hasSelection())
						return;
					store.remove(sel.items);
				}
			}, {
				text: "Save",
				handler: function(btn, t) {
					store.sync();
				}
			},
				extraParamField
			],
			renderTo: Ext.getBody()
		});
});
Удаляем + редактируем + добавляем, а затем - сохраняем. В Firebug'е видим - 3 (три) запроса. Что я делаю не так? | 
| Часовой пояс GMT +3, время: 23:43. |