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

时间:2016-02-25 14:28:32

标签: extjs extjs6

我使用ExtJS 6.0.0,使用TreeStore的REST代理。因此,当我从商店 store.remove(记录)中删除一些记录时,然后尝试与服务器同步更改并调用 store.sync(),什么也没发生!未调用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?

                    },
                }
            ]
        });

1 个答案:

答案 0 :(得分:0)

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