Extjs 从存储中删除新添加的记录后刷新gridpanel

Extjs 从存储中删除新添加的记录后刷新gridpanel,extjs,extjs4.2,Extjs,Extjs4.2,如何从gridpanel中删除新添加的行?gridpanel已绑定到存储 我使用: store.remove(record); store.sync(); 它在网格中的现有记录上运行良好,该记录直接从网格中删除,但当我添加一条记录并希望立即删除它时,它不会从网格中“删除” api被调用,因此记录被“从数据库中删除”,并且当我执行例如浏览器刷新时,记录确实消失了 有人知道这是怎么回事吗?提前谢谢 存储配置 Ext.define('Iziezie.store.animal.doggywood.an

如何从gridpanel中删除新添加的行?gridpanel已绑定到存储

我使用:

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()