ExtJS5:摆脱代理中的root属性

mez*_*eze 3 rest extjs extjs5

我正在尝试将REST API连接到我的ExtJS应用程序.

对于GET /user类似的请求,我返回如下响应:

{items: [{id: 1, ...}, {id: 2, ....}], total: 2}
Run Code Online (Sandbox Code Playgroud)

所以我为此创建了一个模型:

Ext.define('model.User', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'id', type: 'int' },
        { name: 'name' },
    ],

    proxy: {
        reader: {
            type:          'json',
            totalProperty: 'total',
            rootProperty:  'items'
        },
        type:   'rest',
        url:    '/Api/User',
    }
});
Run Code Online (Sandbox Code Playgroud)

网格加载数据,看起来都很完美.现在我希望能够请求我的api所用的单个记录{id: 1, ...}.但是当我这样做时model.User.load(1),永远不会触发成功处理程序,因为响应不包含items属性.如果我将我的记录放在该属性中,它将起作用,但对其他API用户来说也会显得难看.

如何在没有root属性的情况下使其工作?我无法在模型上找到代理/阅读器的任何事件来动态更改它.

Eva*_*oli 7

rootProperty也可以是一个函数,所以你可以这样做:

rootProperty: function(raw) {
    return raw.items ? raw.items : raw;
}
Run Code Online (Sandbox Code Playgroud)