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

フォーマットはサードパーティ製なので変更できません。構造が異なるため、これらのフィールドをマップするのは簡単ではありません。

私の直感は、Ext.Form-> Reader /errorReader->Functionsでカスタムjsonデータ変換を作成する必要があることを示しています。ただし、私はExtJSを初めて使用するため、ExtJSを接着するための頭脳がありません。手伝ってもらえますか?

4

2 に答える 2

1

これを行うことができます。独自のリーダーを作成する必要があります。この投稿のこの答えのようなもの:

このjsonを読み取るようにextjsリーダーを構成する方法は?

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 に答える
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 に答える