ExtJS REST 存储:sync() 不会删除服务器上的记录



我使用ExtJS 4.2.2。用于浏览和管理文件夹的存储定义如下:

Ext.define('hds.store.CaseFolders', {
    extend: 'Ext.data.Store',
    requires: [
        'app.model.Folder',
        'Ext.data.proxy.Rest',
        'Ext.data.reader.Json',
        'Ext.data.writer.Json'
    ],
    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            autoLoad: false,
            model: 'app.model.Folder',
            storeId: 'Folders',
            proxy: {
                type: 'rest',
                url: '/api/folders.json',
                reader: {
                    type: 'json',
                    messageProperty: 'message',
                    root: 'data'
                },
                writer: {
                    type: 'json',
                    writeAllFields: false,
                    root: 'data'
                }
            }
        }, cfg)]);
    }
});

它使用这个模型:

Ext.define('app.model.Folder', {
    extend: 'Ext.data.Model',
    requires: [
        'Ext.data.Field'
    ],
    fields: [
        {
            name: 'name',
            type: 'string'
        },
        {
            name: 'parentId',
            type: 'int'
        },
        {
            name: 'type',
            type: 'string'
        }
    ]
});

文件夹可以添加,重命名和删除。

当更改文件夹的名称时,例如使用store.sync(),记录将通过包含id和name属性的PUT正确同步到服务器。

但是,当删除文件夹时,store.sync()不向服务器发送任何请求。在同步中添加了一个回调函数,但是根本没有调用。

似乎REST存储(代理?)"认为"没有东西要同步到服务器。

为什么会这样?

找到了我遇到的问题的原因:

筛选存储以显示要删除的文件夹的内容。

当想要删除当前文件夹时,其记录将被过滤掉。

在删除父文件夹记录之前添加一行来删除过滤器解决了这个问题。

最新更新