2013-03-25 59 views
2

所以,我正在創建一個登錄表單。Sencha ExtJS Json轉換

煎茶期待任何的Json響應通常具有以下格式:

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

然而,actualy 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 
    } 
} 

的格式是由第三方,所以我不能改變它。由於結構不同,映射這些文件並不是直接的。

我的直覺告訴我,我應該在Ext.Form - > Reader/errorReader - > Functions中編寫定製的json數據轉換。然而,我是ExtJS的新手,我沒有腦汁將它們粘在一起。能否請你幫忙?

回答

1

你並不需要一個定製閱讀器按照約翰。

如果你的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' 
     } 
    } 
}); 
+0

親近,可是你看,我使用的是Ext.Form.Panel和形式上的讀者。那麼沒有模型或代理?我如何適應? – Tom 2013-03-25 22:51:31

1

這可以做到,你會無意中創建自己的讀者。事情是這樣的答案在這個帖子:

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: '' 
    }  
}