Sencha ExtJS Json Transformation

时间:2013-03-25 06:20:18

标签: javascript json extjs

所以,我正在制作登录表格。

Sencha期望任何Json响应通常具有以下格式:

{  
  "root" : {
    "success": true/false,
    "message": ...,
    "id": ...,
    "metaData": ...,
  }
}

然而,我得到的实际Json Response看起来像这样:

{
  "SessionId":"1", //doesn't exist if login error
  "UserName":"admin", //doesn't exist if login error
  "ResponseStatus":{
    //blank or failed to login error list 
  }
}

格式来自第三方,所以我无法改变它。由于结构不同,映射这些文件并不简单。

我的直觉告诉我,我应该在Ext.Form中编写自定义json数据转换 - > Reader / errorReader - >功能。但是,我是ExtJS的新手,我没有脑汁将它粘在一起。你能帮忙吗?

2 个答案:

答案 0 :(得分:1)

这可以做到,你需要创建自己的Reader。在这篇文章中有这样的回答:

how to configure extjs reader to read this json?

Ext.define('Ext.data.reader.JsonPWithoutRoot', {
    extend: 'Ext.data.reader.Json',
    read: function(response) {
        return this.callParent([ { root: response } ]);
    },
    root: 'root'
});

您的商店代理配置:

proxy: {
    type    : 'json',
    reader  : {
        type: 'json',
        root: ''
    }       
}

答案 1 :(得分:1)

根据Johan,您不需要自定义阅读器。

如果您的json没有root,那么不要告诉读者使用root ...

Ext.define('My.model.Model1', {
    extend:'Ext.data.Model',
    fields:[
    'SessionId',
    'UserName'
    ],
    proxy:{
      type:'ajax',
      url:'./app/data/response.json',
      reader:{
        type:'json',
        messageProperty:'ResponseStatus'
      }
    }
});