Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Вызов record.save() не обновляет pagingtoolbar и не меняет фантомный id на реальный (https://javascript.ru/forum/extjs/56407-vyzov-record-save-ne-obnovlyaet-pagingtoolbar-i-ne-menyaet-fantomnyjj-id-na-realnyjj.html)

khusamov 14.06.2015 18:05

Вызов 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:30

С удалением записей такие же проблемы. Пэйджер не обновляется. Надпись в grid-е о том, что записей нет - не появляется.

bastrakov 15.06.2015 10:08

перечитайте грид, делов-то. :-)

siber-biber 15.06.2015 11:27

ну зашибись изза одной записи всё перерисовывать.. так не должно быть просто в коде чтото не то.
нужен тест кейс

bastrakov 16.06.2015 12:40

гм... правильно ли я понял, что действия других пользователей нас не интересуют?
я к тому, что чем реже перечитывать грид (особенно с пейджингом), тем больше вероятность видеть неверные данные. а тут как бы и случай подходящий.

novikov 16.06.2015 13:06

Сохранение записи 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();
                }
            }
        });
        
    },


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