Как получить ExtJS JsonStore для помещения данных JSON непосредственно в тело запроса? - PullRequest
1 голос
/ 28 мая 2010

У меня есть JsonStore, настроенный так:

var store = new Ext.data.JsonStore({
    restful: true,
    url: '/categories',
    remoteSort: true,
    idProperty: 'Id',
    totalProperty: 'total',
    root: 'results',
    writer: new Ext.data.JsonWriter({
        encode: false
    }),

    fields: [ 'Id', 'Name' ]
});

Я беру некоторые данные с сервера, затем редактирую одну из записей. Когда я говорю хранилищу сохранить, он отправляет этот JSON обратно на сервер:

{
    "results":
    {
        "Name":"Trivial123",
        "Id":2
    }
}

Хранилище помещает JSON в свойство results (корневое свойство, настроенное для хранилища). Однако сервер ожидает этого:

{
    "Name":"Trivial123",
    "Id":2
}

Другими словами, сериализованный объект должен быть помещен непосредственно в тело ответа, а не заключен в свойство. Кто-нибудь знает, как я могу настроить магазин для этого?

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Вам необходимо переопределить функцию рендеринга данных в JsonWriter, например так:

var rootlessRenderFunction = function (params, baseParams, data) {
   if (this.encode === true) {
      Ext.apply(params, baseParams);
      params = Ext.encode(data);
   } else {
      params.jsonData = data;
   }
};

var myWriter = new Ext.data.JsonWriter({
   encode: false,
   writeAllFields: true
});
myWriter.render = rootlessRenderFunction;

var myStore = new Ext.data.JsonStore({
   // ... various config values ...
   writer: myWriter
});

Эта реализация "rootlessRenderFunction" такая же, как и для кода рендеринга Ext JsonWriter, за исключением того, что он не вставляет корень в данные запроса.

Это, конечно, хак.

0 голосов
/ 28 мая 2010

Я предполагаю, что вы не можете просто не установить корневое значение для магазина по какой-то причине? Так я обычно делаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...