Вызов 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, время: 07:20. |