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