Extjs 从存储中删除新添加的记录后刷新gridpanel
如何从gridpanel中删除新添加的行?gridpanel已绑定到存储 我使用:Extjs 从存储中删除新添加的记录后刷新gridpanel,extjs,extjs4.2,Extjs,Extjs4.2,如何从gridpanel中删除新添加的行?gridpanel已绑定到存储 我使用: store.remove(record); store.sync(); 它在网格中的现有记录上运行良好,该记录直接从网格中删除,但当我添加一条记录并希望立即删除它时,它不会从网格中“删除” api被调用,因此记录被“从数据库中删除”,并且当我执行例如浏览器刷新时,记录确实消失了 有人知道这是怎么回事吗?提前谢谢 存储配置 Ext.define('Iziezie.store.animal.doggywood.an
store.remove(record);
store.sync();
它在网格中的现有记录上运行良好,该记录直接从网格中删除,但当我添加一条记录并希望立即删除它时,它不会从网格中“删除”
api被调用,因此记录被“从数据库中删除”,并且当我执行例如浏览器刷新时,记录确实消失了
有人知道这是怎么回事吗?提前谢谢
存储配置
Ext.define('Iziezie.store.animal.doggywood.animal', {
extend: 'Iziezie.store.animal.animal',
model: 'Iziezie.model.animal.doggywood.animal',
proxy: {
type: 'baseProxy',
api: {
create: '../php/api/doggywood_animals.php?request=create',
read: '../php/api/doggywood_animals.php?request=read',
update: '../php/api/doggywood_animals.php?request=update',
destroy: '../php/api/doggywood_animals.php?request=destroy'
}
}
});
通过以下形式添加新记录:
var store = gridpanel.getStore();
var model = Ext.ModelMgr.getModel(store.model);
var record = model.create();
store.insert(0, record);
...
frm.loadRecord(record);
提交表格
frm.updateRecord();
var record = frm.getRecord();
record.save();
删除时:
var sm = gridpanel.getSelectionModel();
var record = sm.getLastSelected();
var store = gridpanel.getStore();
store.remove(record);
store.sync();
要强制在网格上进行可视化刷新,只需调用
myGridPanel.getView().refresh();
但这不应该是必需的,网格应该只显示商店中的任何东西。您可以发布您正在执行的操作的完整代码示例吗?尝试使用行编辑将新记录创建到网格面板:
createRecord: function() {
var model = Ext.ModelMgr.getModel('EKOJS.model.m_yourmodel');
var r = Ext.ModelManager.create({
id: '',
text: ''
}, model);
this.getYourgridaliasview().getStore().insert(0, r);
this.getYourgridaliasview().rowEditing.startEdit(0, 0);
},
要删除网格面板中的选定记录,请执行以下操作:
deleteRecord: function(dataview, selections) {
var getstore = this.getYourgridaliasview().getStore();
var selection = this.getYourgridaliasview().getSelectionModel().getSelection()[
0];
if (selection) {
Ext.Msg.confirm('Confirmation',
'Are you sure to delete this data: id = "' + selection.data
.id + '"?', function(btn) {
if (btn == 'yes') {
getstore.remove(selection);
getstore.sync();
}
});
}
},
而且,重要的是,在创建如下记录后,请始终重新加载存储:
Ext.Ajax.request({
method: 'POST',
url: '../php/api/doggywood_animals.php?request=create',
params: {
data: jsonData
},
success: function(response) {
e.store.reload({
callback: function() {
var newRecordIndex = e.store.findBy(
function(record, id) {
if (record.get('id') === e.record
.data.id) {
return true;
}
return false;
});
/* me.grid.getView().select(recordIndex); */
me.grid.getSelectionModel().select(
newRecordIndex);
}
});
}
});
我使用的after edit in rowediting插件的侦听器如下所示:
'afteredit': function(editor, e) {
var me = this;
if ((/^\s*$/).test(e.record.data.id)) {
Ext.Msg.alert('Peringatan', 'Kolom "id" tidak boleh kosong.');
return false;
}
/* e.store.sync();
return true; */
var jsonData = Ext.encode(e.record.data);
Ext.Ajax.request({
method: 'POST',
url: '../php/api/doggywood_animals.php?request=create',
params: {
data: jsonData
},
success: function(response) {
e.store.reload({
callback: function() {
var newRecordIndex = e.store.findBy(
function(record, id) {
if (record.get('id') ===
e.record.data.id
) {
return true;
}
return false;
});
/* me.grid.getView().select(recordIndex); */
me.grid.getSelectionModel().select(
newRecordIndex);
}
});
}
});
return true;
}
可能对您有点帮助。Thnx,我尝试了myGridPanel.getView().refresh();但这并没有奏效。不幸的是,发布一个紧凑的代码示例是不可能的。我希望这是一个已知的问题。你能至少发布一些代码的小部分吗,比如你的网格和存储配置?记录出现在gridpanel中,并在表单中更新时更新,但我发现它不知何故不在存储中:IndexOf=-1。在frm.getRecord()之后,IndexOf变为-1,而store仍无法录制。感谢您的回答,但我必须使用表单,因为模型中的字段比网格中的字段多。请在store.sync()之后尝试store.reload()