ExtJS 6 store.remove(records) -> store.sync() 不触发服务器



我使用ExtJS 6.0.0,REST代理和TreeStore。因此,当我从存储 store.remove(记录) 中删除一些记录时,请尝试与服务器同步更改并调用 store.sync(),但没有任何反应!未调用同步的回调函数。

URL:"/admin/pages",以正确的格式返回简单的嵌套数据。查看和更新操作运行良好。

我制作了一个简单的代码片段来说明这个问题:

    Ext.define('Pages', {
        extend: 'Ext.data.TreeModel',
        fields: [
            {name: 'id',     type: 'int'},
            {name: 'parent_id', type: 'int'},
            {name: 'title', type: 'string'}
        ]
    });
    Ext.onReady(function() {
        var store = Ext.create('Ext.data.TreeStore', {
            model: 'Pages',
            proxy: {
                type: 'rest',
                url: '/admin/pages',
            }
        });
        var tree = Ext.create('Ext.tree.Panel', {
            width: 500,
            height: 300,
            renderTo: Ext.getBody(),
            rootVisible: false,
            store: store,
            multiSelect: true,
            columns: [{
                xtype: 'treecolumn',
                text: 'title',
                sortable: true,
                dataIndex: 'title'
            }],
            tbar: [
                {
                    text: 'Delete',
                    handler: function () {
                        var records = tree.getSelection();
                        store.remove(records); // remove nodes from tree
                        store.sync(); // do nothing!! WHY?
                    },
                }
            ]
        });

如果存储配置为自动同步:true,则记录的 endEdit 方法已经在内部导致在存储上执行保存。我们只需要在自动同步为 false 时手动保存,否则,我们将创建重复的交易。您需要在使用 store.sync() 进行同步后调用 store.load()

最新更新