2014-11-09 73 views
3

我试图将REST API连接到我的ExtJS应用程序。ExtJS5:删除代理中的根属性

对于GET /user都要求我返回响应如下:

{items: [{id: 1, ...}, {id: 2, ....}], total: 2} 

所以我创建了一个模型:

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', 
    } 
}); 

的网格数据加载和一切看起来很完美。现在我希望能够请求我的API用作{id: 1, ...}的单个记录。 但是,当我做model.User.load(1)成功处理程序永远不会被触发,因为响应不包含items属性。如果我把我的记录放在那个属性中,它会起作用,但对于其他API用户也会看起来很丑。

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

回答

7

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

rootProperty: function(raw) { 
    return raw.items ? raw.items : raw; 
}