2

所以,我正在制作一个登录表单。

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

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

但是,我得到的实际 Json 响应如下所示:

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

格式来自第 3 方,所以我无法更改。由于结构不同,映射这些文件并不直接。

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

4

2 回答 2

1

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

如果您的 json 没有根目录,请不要告诉您的读者使用根目录...

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'
      }
    }
});
于 2013-03-25T19:27:21.003 回答
1

这可以做到,您将需要创建自己的阅读器。这篇文章中的这个答案是这样的:

如何配置 extjs 阅读器来读取这个 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: ''
    }       
}
于 2013-03-25T08:33:06.520 回答