Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.08.2014, 18:34
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

editorGridPanel, метод save() и ответ с сервера
ИСПОЛЬЗУЮ EXT 3

Задаю ридер:
var leftReader = new Ext.data.JsonReader({
    root: 'dan',
    totalProperty: 'total'
	}, [
            {name: 'x80402'},
            {name: 'x375'},
	    {name: 'p70402'},
            {name: 'ch23'}
	]
);


Задаю сторе:
var wr=new Ext.data.JsonWriter
({
    encode: true,
    writeAllFields: true
});

var lStore = new Ext.data.Store({
    autoDestroy: true,
    autoSave: false,
    successProperty: true,
    proxy: new Ext.data.HttpProxy({url: 'phps/mm160c07_t.php'}),
    baseParams: {c155: c155, priznak: 'left'},
    reader: leftReader,
    writer: wr,
    sortInfo:{field: 'x80402', direction: "ASC"},
    autoLoad: true,
    batchSave: true // ДЛЯ ЧЕГО ЭТА КОМАНДА????
});


Задаю чекбоксы:

var checkboxLeft = new Ext.grid.CheckboxSelectionModel({
    singleSelect: false
});


Далее модель колонок, многие из которых можно редактировать:
var leftCm = new Ext.grid.ColumnModel({
    defaults: {
        sortable: true, menuDisabled: false,
	align: 'center'
    },
    columns: [
        checkboxLeft,
        {header: "№ п/п ",  dataIndex: 'x80402', sortable: true, width: 45},
	{header: "Должность", dataIndex: 'ch23', sortable: true, width: 200},
	{header: "Фамилия И.О.", dataIndex: 'p70402', sortable: true, width: 200,
        editor:  new fm.ComboBox({
                name: 'c07p70402',
                fieldLabel: 'ФИО',
                store: mainStorec07,
                displayField: 'p70402',
                typeAhead: false,
                loadingText: 'Поиск...',
                emptyText: 'Введите ФИО',
                minChars: 3,
                anchor: '95%',
                pageSize: 5,
                triggerAction: 'all',
                hideTrigger: true,
                tpl: movieTpl,
                itemSelector: 'div.movie-item',
                onSelect: function(record){
                    this.setValue(record.data.getFio);

                    var zam=Ext.getCmp('id_leftgrid').selModel.getSelections()

                    var myst = Ext.getCmp('id_leftgrid').getStore();
                        var zzz=myst.getCount();
                        for (var zil=0; zil<zzz; zil++){
                            zInd=myst.find('ch23',myst.data.items[zil].data.ch23,0,false,false);
                            row = myst.getAt(zInd).data;
                            row.ch23=record.data.x745;
                        }

                    this.collapse();
                }
                })
        },
	{header: "Дата подписи", dataIndex: 'x375', sortable: true, width: 100,
        renderer: getDateFont,
        editor: new fm.DateField({
                allowBlank: true, type: 'date',format: 'd.m.Y'
                })
        }
    ]
});


Непосредственно сам грид:
var leftGrid = new Ext.grid.EditorGridPanel({
    id: 'id_leftgrid',
    store: lStore,
    enableHdMenu: false,
    height: 190,
    autoWidth: true,
    cm: leftCm,
    sm: checkboxLeft,
    clicksToEdit: '1'
});


И привожу код кнопки, по клику на которую сохраняю:
id: 'c07Save',
            xtype: 'tbbutton',
            text: '<b>Cохранить</b>',
            handler: function(sm){
                leftGrid.store.save({
                    listeners: { beforesave: {fn: function(){
                        alert(9999);
			var success=Ext.util.JSON.decode(resp.responseText).success;
			var message=Ext.util.JSON.decode(resp.responseText).message;
			if (success){
			    Ext.Msg.alert('С О О Б Щ Е Н И Е ',message);
			    }else Ext.Msg.alert('О Ш И Б К А',message);
		    }
                    }}
                    }); 
            }

С сервера приходит ответ - success и message - я их сам формирую. Вопрос в том - как мне ответ поймать?? listeners не работает! Как же получить ответ с сервера об удачном сохранении?

И второй вопрос - как передать для сохранения строки ТОЛЬКО отмеченные чекбоксами? При этом используя leftGrid.store.save() ????
Ответить с цитированием
  #2 (permalink)  
Старый 22.08.2014, 20:37
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

Может не стоило так подробно расписывать?
Ответить с цитированием
  #3 (permalink)  
Старый 26.08.2014, 14:58
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

Сообщение от maksimka2112 Посмотреть сообщение
Может не стоило так подробно расписывать?
тут дело не в этом.. концентрация "нечитания" доки у вас запредельная. ))
в метод save параметры не передаются: http://docs.sencha.com/extjs/3.4.0/#...re-method-save, а вы туда лиснеры какието суёте.
в доке по методу еще и написано какие ивенты он поднимает.
например этот перед сохранением данных: http://docs.sencha.com/extjs/3.4.0/#...ent-beforesave

хотите лиснеры установите их на стор:
var lStore = new Ext.data.Store({
    ...
    listeners : {
        beforesave: function (store, data) {
            ...
        }
    }
})
и делайте с данными перед отправкой что хотите
Ответить с цитированием
  #4 (permalink)  
Старый 26.08.2014, 19:34
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

Сообщение от siber-biber Посмотреть сообщение
и делайте с данными перед отправкой что хотите
Спасибо! Доку читаю, стараюсь читать. Просто на эксте у меня можно сказать первый проект.

Так мне надо ни перед отправкой! А после отправки получить ответ, что данные успешно сохранились! А почему листенерс пытался засунуть ни в сторе, так всё потому, что есть стандартная возможность у editorGridPanel - grid.store.save() - отправляет отредактированные данные на сервер,указанный в прокси... Мне ли вам объяснять - вы наверняка лучше меня про это знаете. Так потому и спрашиваю, что сам я не знаю как распознать в ексте ответ, после вызова grid.store.save(). Объект данных отправляется отлично, а вот в ответ ничего не приходит, поэтому не могу понять, когда на сервере insert закончился. Да и как назло ассинхронность в false в ext 3 поставить нельзя....в общем беда, очень жду помощи!
Ответить с цитированием
  #5 (permalink)  
Старый 27.08.2014, 10:20
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

Сообщение от maksimka2112
Так мне надо ни перед отправкой
это я к тому что вы хотели не все данные на сервер отправлять..

есть еще события на сторе которые поднимаются при ответе сервера (все они есть в доке):
http://docs.sencha.com/extjs/3.4.0/#...ore-event-save
http://docs.sencha.com/extjs/3.4.0/#...re-event-write
поставьте на них лиснеры, в них пропишите debugger, посмотрите в отладчике что приходит в аргументах и выберите какое из них вам подходит лучше.
Ответить с цитированием
  #6 (permalink)  
Старый 27.08.2014, 20:10
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

Сообщение от siber-biber Посмотреть сообщение
это я к тому что вы хотели не все данные на сервер отправлять..

есть еще события на сторе которые поднимаются при ответе сервера (все они есть в доке):
http://docs.sencha.com/extjs/3.4.0/#...ore-event-save
http://docs.sencha.com/extjs/3.4.0/#...re-event-write
поставьте на них лиснеры, в них пропишите debugger, посмотрите в отладчике что приходит в аргументах и выберите какое из них вам подходит лучше.
Спасибо, что-то наподобие я и ищу. Что-то вроде:
Fires if the server returns 200 after an Ext.data.Api.actions CRUD action. ...
Fires if the server returns 200 after an Ext.data.Api.actions CRUD action. Success of the action is determined in the result['successProperty']property (NOTE for RESTful stores, a simple 20x response is sufficient for the actions "destroy" and "update". The "create" action should should return 200 along with a database pk).

Вот этот ответ 200 - как бы его вытащить? Может из rs - типа response. Хм...завтра будет над чем подумать. Вечером завтра отпишусь о результатах.

Ну не хочется мне отказываться от такой классной вещи как save() !!! Удобно приходят данные и возиться с отправкой не надо
Ответить с цитированием
  #7 (permalink)  
Старый 28.08.2014, 18:29
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

Сделал примерно так:

Ext.getCmp('id_leftgrid').store.save();
		    Ext.getCmp('id_leftgrid').store.commitChanges();
		    lStore.on('save', function(){
		    my_after_function();
		    })


Если нужен ответ с сервера, то можно вот так:

Ext.getCmp('id_leftgrid').store.save();
		    Ext.getCmp('id_leftgrid').store.commitChanges();
		    lStore.on('exception', function(response){
		        alert(response.responseText);
		    })

Может кому и пригодится Спасибо за помощь!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ответ от сервера о окончании задачи Vit AJAX и COMET 13 17.06.2012 21:31
Как разложить ответ сервера по разным div-ам? brudershaft AJAX и COMET 0 23.04.2012 20:40
ответ сервера не сохраняется в глобальную переменную cyberpunk AJAX и COMET 2 06.03.2012 11:57
Chrome firbug ответ с сервера nyols Общие вопросы Javascript 2 05.08.2011 12:19
Ответ сервера в плугине ajaxForm отдается неправильно. IgorOk jQuery 11 13.12.2009 04:35