2016-07-20 4 views
0

У меня возникли проблемы с загрузкой моего первого магазина ExtJS.extjs store.load не заполняется, возможно, проблема с корневым объектом?

 var testStore = Ext.data.StoreManager.lookup('myUserStoreID'); 
     testStore.load({ 

     callback: function (records, operation, success) { 

      testStore.each(function (record) { 
       debugger; 
       var task = record.data.description; 
       console.log(task); 
      }); 

      //debugger; 
      //var x2 = operation._response; 
      //var x3 = x2.responseText; 
      //var x4 = Ext.decode(x3); 
      ////var x3 = Ext.JSON.decode(operation); 
      ////var x2 = Ext.decode(operation.response); 

      //console.log(testStore); 

     } 
    }); 

В отладчике я могу видеть правильные данные, если я развернутый в operation._response.responseText, но записи являются пустыми. Поэтому я знаю, что это просто связано с моим кодом. Если я использую Ext.decode, он возвращает объект. Что я делаю неправильно, что возвращаемые данные автоматически заполняют мой магазин.

: Это изображение объекта в скрипаче. fiddler

вот модель, которую я пытаюсь использовать ... Я знаю, что у нее еще не все поля.

Ext.define('ExtApplication1.model.UserModel', { 
extend: 'ExtApplication1.model.Base', 

requires: ['ExtApplication1.model.Base'], 

fields: [ 
    /* 
    The fields for this model. This is an Array of Ext.data.field.Field definition objects or simply the field name. 
    If just a name is given, the field type defaults to auto. For example: 
    */ 
    { name: 'UserID',  type: 'int' }, 
    { name: 'UserName',  type: 'string' }, 
    { name: 'password', type: 'string' }, 
    { name: 'Email', type: 'string' }, 
    { name: 'GroupID' } 

], 

proxy: { 

    type: 'ajax', 
    url: 'http://localhost:49537/api/user/gettargetuser/xxx/xxx', 

    reader: { 
     type: 'json', 
     rootProperty: 'JSON' 
    } 

} 

Вот мой класс User в WebAPI userclasswebapi

здесь является MainModel.js, где я создаю магазины

Ext.define('ExtApplication1.view.main.MainModel', { 
extend: 'Ext.app.ViewModel', 

alias: 'viewmodel.main', 

data: { 
    name: 'ExtApplication1', 
    appName: xxx, 
    appHeaderIcon: '<span class="fa fa-desktop fa-lg app-header-logo">', 
    footer: 'Copyright - xxx- x 
}, 

stores: { 
     sessionListByInterest: { 
      model: 'MainMenuListModel', 
      autoLoad: false  //was true 
     }, 
     myUserStore: { 
      model: 'UserModel', 
      storeId: 'myUserStoreID', 
      autoLoad: false 
     }, 
+0

Имена атрибутов JSON не совпадают с именами полей в вашей модели extjs. например, у вас есть «электронная почта» в JSON, но «Email» в качестве имени поля в модели. Если вы исправите это, это сработает? –

+0

@AmolKatdare очень странно, они действительно соответствуют ... хотя бы по электронной почте. Я прикрепил фотографию webapiClass для пользователя ... электронная почта действительно отображается как «Электронная почта». так что, по крайней мере, эта подставка действительно соответствует. – solarissf

+0

делает это как-то связано с моим rootProperty? – solarissf

ответ

1

Вопрос заключается в том, что магазин ожидает rootProperty содержать массив записей, тогда как вы делаете только одну запись.

Если вы хотите загрузить только одну запись, которая не находится в массиве, вам придется использовать статическую функцию model.load().

Или вы можете изменить API конечной точки от User JSON к List<User> JSON (или IEnumerable<User> или ICollection<User> или User[] ...), даже если вы собираетесь возвращать только один пользователь. Неважно, сколько записей есть в массиве JSON, но массив ожидается в магазине ExtJS.

+0

Позвольте мне проверить, что ... как узнать, что положить в прокси для rootProperty? – solarissf

+0

, поэтому я изменил свой вызов, чтобы вернуть несколько элементов, и вы правы ... это сработало! Спасибо за указание на это! – solarissf

+0

одна последняя вещь об этом, я разместил мою квадратную диаграмму выше. В моем webapi у меня есть классы для всех этих таблиц (10 классов). В ExtJS у меня есть только одна модель пользователя. Теперь, когда я делаю это store.load пользователей, когда я смотрю на запись/объект в отладчике веб-браузера, я могу развернуть все 10 классов ... все без классов в ExtJS. Я был под впечатлением, если бы у меня было 10 классов webapi, мне пришлось бы иметь 10 классов extjs. Что я не получу здесь? – solarissf

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