Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.06.2015, 18:05
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Вызов record.save() не обновляет pagingtoolbar и не меняет фантомный id на реальный
Здравствуйте!

Вот кусок кода:

if (form.isValid()) {
	form.updateRecord();
	if (form.getRecord().phantom) {
		// insert
		Ext.Msg.wait("Данные добавляются! Подождите...", "Добавление");
		form.getRecord().save({
			scope: me,
			success: "onInsertSuccess",
			failure: "onInsertFailure"
		});
	} else {
		// update
		var store = me.getStore();
		if (form.isDirty()) {
			Ext.Msg.wait("Данные обновляются! Подождите...", "Обновление");
			store.sync({
				scope: me,
				success: me.onUpdateSuccess,
				failure: me.onUpdateFailure
			});
		} else {
			me.getView().close();
		}
	}
},

onInsertSuccess: function(record) {
	var me = this;
	me.getStore().add(record);
	Ext.Msg.hide();
	me.getView().close();
	// ЗДЕСЬ ПРОБЛЕМЫ: pagingtoolbar не обновляется, в гриде id равен фантомному, хотя сервер вернул реальный
}


Почему после вызова form.getRecord().save() pagingtoolbar не обновляется, а в гриде id равен фантомному, хотя сервер вернул реальный?

Последний раз редактировалось khusamov, 14.06.2015 в 18:08.
Ответить с цитированием
  #2 (permalink)  
Старый 14.06.2015, 18:30
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

С удалением записей такие же проблемы. Пэйджер не обновляется. Надпись в grid-е о том, что записей нет - не появляется.
Ответить с цитированием
  #3 (permalink)  
Старый 15.06.2015, 10:08
Аспирант
Отправить личное сообщение для bastrakov Посмотреть профиль Найти все сообщения от bastrakov
 
Регистрация: 27.03.2015
Сообщений: 31

перечитайте грид, делов-то. :-)
Ответить с цитированием
  #4 (permalink)  
Старый 15.06.2015, 11:27
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

ну зашибись изза одной записи всё перерисовывать.. так не должно быть просто в коде чтото не то.
нужен тест кейс
Ответить с цитированием
  #5 (permalink)  
Старый 16.06.2015, 12:40
Аспирант
Отправить личное сообщение для bastrakov Посмотреть профиль Найти все сообщения от bastrakov
 
Регистрация: 27.03.2015
Сообщений: 31

гм... правильно ли я понял, что действия других пользователей нас не интересуют?
я к тому, что чем реже перечитывать грид (особенно с пейджингом), тем больше вероятность видеть неверные данные. а тут как бы и случай подходящий.
Ответить с цитированием
  #6 (permalink)  
Старый 16.06.2015, 13:06
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

Сохранение записи record.save() не связано с обновлением хранилища, подложенного под грид, несмотря на то, что эта запись относится к этому хранилищу.

Думаю, чтобы синхронизация затронула хранилище грида, нужно вначале получить его через record.store, а затем выполнить sync().

Либо попробовать record.commit(false).

Из моего арсенала:

onNewSubmitted: function(record) {
        
        record.save({
            success: function() {
                var view = this.getView();
                var companyGrid = view.down('companyGrid');

                var store = Ext.StoreManager.lookup('companyStore');
                store.add(record);

                companyGrid.getSelectionModel().select(record);

            },
            scope: this
        });

    },

    onNewCanseled: function() {
        
        var view = this.getView();
        var cardContainer = view.down('#cardContainer');
        var companyNew = view.down('companyNew');
        
        var record = companyNew.getRecord();
        record.erase();
        companyNew.reset(true);
        
        cardContainer.hide();
        
    },

    onDeleteRequested: function(record) {
        
        var view = this.getView();
        var cardContainer = view.down('#cardContainer');
        var companyForm = view.down('companyForm');
        var companyDisplay = view.down('companyDisplay');
        
        if (record.phantom) {
            cardContainer.hide();
            companyForm.reset(true);
            companyDisplay.reset(true);
            return;
        }

        Ext.Msg.show({
            title:'Удаление',
            message: 'Действительно удалить запись?',
            buttons: Ext.Msg.YESNO,
            buttonText: {
                yes: 'Да',
                no: 'Нет'
            },
            icon: Ext.Msg.QUESTION,
            fn: function(btn) {
                if (btn === 'yes') {
                    //var store = Ext.StoreManager.lookup('companyStore');
                    record.erase();
                }
            }
        });
        
    },

Последний раз редактировалось novikov, 16.06.2015 в 13:09.
Ответить с цитированием
Ответ



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

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