Вызов 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 равен фантомному, хотя сервер вернул реальный? |
С удалением записей такие же проблемы. Пэйджер не обновляется. Надпись в grid-е о том, что записей нет - не появляется.
|
перечитайте грид, делов-то. :-)
|
ну зашибись изза одной записи всё перерисовывать.. так не должно быть просто в коде чтото не то.
нужен тест кейс |
гм... правильно ли я понял, что действия других пользователей нас не интересуют?
я к тому, что чем реже перечитывать грид (особенно с пейджингом), тем больше вероятность видеть неверные данные. а тут как бы и случай подходящий. |
Сохранение записи 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. |