読者です 読者をやめる 読者になる 読者になる

extjsのJsonWriterが送信するJSONのルート要素

extjsにはRESTfulなサービスを利用するための機能があり、簡単にJerseyと通信することができるのですが、examplesにあった以下のようなコードだと、

var reader = new Ext.data.JsonReader({
    totalProperty: 'total',
    successProperty: 'success',
    idProperty: 'id',
    root: 'data',
    messageProperty: 'message'
}, [
    {name: 'id'},
    {name: 'name', allowBlank: false},
    {name: 'email', allowBlank: false},
]);

var writer = new Ext.data.JsonWriter({
    encode: false
});

var store = new Ext.data.Store({
    id: 'user',
    restful: true,
    proxy: proxy,
    reader: reader,
    writer: writer
});

POST/PUTでサーバ側に送信されるJSONが以下のようになります。dataというルート要素でラップされています("data"部分はExt.data.JsonReaderのrootで指定します)。

{
     data: {"email":"foo@example.com","name":"foo"}
}

ルート要素が必要がない場合には、以下のようにExt.data.JsonWriterのrenderメソッドを上書きします。

var writer = new Ext.data.JsonWriter({
    encode: false,
    render : function(params, baseParams, data) {
        if (this.encode === true) {
            params = Ext.encode(data);
        } else {
            params.jsonData = data;
        }
    },    
});

こうなります。

{"email":"foo@example.com","name":"foo"}