2015-05-05 4 views
3

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

Ext.define('MyApp.model.PersonStore',{ 
    extend: 'Ext.data.Store', 
    model: 'MyApp.model.Person', 
    storeId: 'PersonStore', 
    proxy: { 
     type: 'ajax', 
     url: 'http://localhost:80/index.php?person=create', 
     reader: { 
      type: 'json' 
     }, 
     writer: { 
      type: 'json' 
     } 
    } 
}); 

Ext.define('MyApp.model.Person',{ 
    extend: 'Ext.data.Model', 
    idProperty: 'id', 
    fields: [ 
     {name: 'id', type: 'int'}, 
     {name: 'name', type: 'string'}, 
     {name: 'age', type: 'int'}, 
    ], 
    hasMany: { 
     model: 'MyApp.model.Item', 
     name: 'items', 
     associationKey: 'items'  
    } 
}); 

Ext.define('MyApp.model.Item',{ 
    extend: 'Ext.data.Model', 
    fields: [ 
     { 
      name: 'id', 
      type: 'int' 
     }, 
     { 
      name: 'itemType', 
      type: 'string' 
     } 
    ], 
    belongsTo: 'MyApp.model.Person'  
}); 

Затем в мой контроллер при создании нового человека, я это сделать:

var store = grid.getStore(); 
store.add({name: 'Steve', age: '50'}); 
var lastInsertedPerson = store.last(); 
var items = lastInsertedPerson.items(); 
items.add({itemType: 'item1'}); 
items.add({itemType: 'item2'}); 

store.sync(); 

Затем запрос POST отправляется в следующем формате:

{"id":"MyApp.model.Person-1", "name":"Steve", "age":"50"} 

, но я ожидаю, что это :

{"id":"MyApp.model.Person-1", "name":"Steve", "age":"50", "items":[{"itemType":"item1"}, {"itemType":"item2"}]} 

Так почему разве объект json в запросе POST не содержит вложенный объект Item?

+0

Вы нашли решение для этого? Благодаря! – perryflynn

ответ

0

Для того, чтобы вложенные данные присутствовали в почтовом объекте, вам необходимо установить конфигурацию в объекте записи прокси-сервера родительской модели. Так что если вы измените Person модели, чтобы выглядеть как код ниже вложенные объекты должны проходить через:

Ext.define('MyApp.model.Person',{ 
    extend: 'Ext.data.Model', 
    idProperty: 'id', 
    fields: [ 
     {name: 'id', type: 'int'}, 
     {name: 'name', type: 'string'}, 
     {name: 'age', type: 'int'}, 
    ], 
    hasMany: { 
     model: 'MyApp.model.Item', 
     name: 'items', 
     associationKey: 'items' 
    }, 
    proxy: { 
     url: '/url/to/your/backend/service', 
     writer: { 
      type: 'json', 
      allDataOptions: { 
       associated: true 
      } 
     } 
    } 
}); 

Обратите внимание, что автор имеет partialDataOptions конфигурации, а также, так что если вы хотите, чтобы вложенные данные прийти через в PUT необходимо также установить конфигурацию associated. Дополнительную информацию о параметрах конфигурации записи см. В разделе Ext Docs.

Смежные вопросы