2013-06-25 7 views
1

я получаю от сервера в следующем формате JSON:Сенча Сенсорные проблемы 2 ассоциации

{ 
    "contextPath":"http://apps.dhis2.org/demo", 
    "user":{ 
     "id":"GOLswS44mh8", 
     "name":"System Administrator", 
     "isAdmin":true, 
     "ou":{ 
      "id":"ImspTQPwCqd", 
      "name":"Sierra Leone" 
     } 
    } 
} 

Мне нужно преобразовать этот JSON в двух моделях: пользователя модель и OrganizationUnit модель.

Я прочитал этот учебник http://docs.sencha.com/touch/2.2.1/#!/api/Ext.data.reader.Reader так мой код:

Пользователь модель:

Ext.define('mobile-visualizer.model.User', { 
    extend: 'Ext.data.Model', 

    config: { 
     fields: [ 
      {name: 'id', type: 'string'}, 
      {name: 'name', type: 'string'}, 
      {name: 'isAdmin', type: 'boolean'} 
     ], 
     hasOne: { 
      model: "mobile-visualizer.model.OrganizationUnit", 
      name: "ou" 
     }, 
     proxy: { 
      type: 'ajax', 
      url : 'http://apps.dhis2.org/demo/dhis-web-visualizer/initialize.action', 
      method : 'GET', 
      withCredentials : true, 
      useDefaultXhrHeader : false, 
      reader: { 
       type: 'json', 
       rootProperty: 'user' 
      } 
     } 
    } 
}); 

OrganizationUnit модель:

Ext.define('mobile-visualizer.model.OrganizationUnit', { 
    extend: 'Ext.data.Model', 

    config: { 
     fields: [ 
      {name: 'id', type: 'string'}, 
      {name: 'name', type: 'string'} 
     ], 
     belongsTo: 'mobile-visualizer.model.User' 
    } 
}); 

магазин:

Ext.define('mobile-visualizer.store.UsersStore', { 
    extend : 'Ext.data.Store', 
    model : "mobile-visualizer.model.User", 
    autoLoad : false, 
    storeId : "usersStore", 

    proxy : { 
     type : 'ajax', 
     url : 'http://apps.dhis2.org/demo/dhis-web-visualizer/initialize.action', 
     method : 'GET', 
     withCredentials : true, 
     useDefaultXhrHeader : false, 
     reader : { 
      type : 'json', 
      rootProperty : 'user' 
     } 
    } 
}); 

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

 var store = Ext.create('mobile-visualizer.store.UsersStore'); 
     store.load({ 
        callback : function() { 
         // the user that was loaded 
         var user = store.first(); 
         console.log(user.ou()) 
        } 
       }); 

У меня есть ошибка: Uncaught TypeError: Object [объект Object] не имеет какого-либо метода 'НУ'

Я можете получить всю информацию о пользователе, но я не могу получить НУ от пользователя. Это похоже на проблему с ассоциацией.

Но я делаю все как официальный урок. Помогите решить эту проблему. Спасибо.

+0

'console.log (user.get ('Ou'));' – Rob

ответ

1

Следуйте мои правила, и все выйдет радужно:

http://extjs-tutorials.blogspot.ca/2012/05/extjs-hasmany-relationships-rules.html

http://extjs-tutorials.blogspot.ca/2012/05/extjs-belongsto-association-rules.html

Это для ExtJS, но очень похоже на сенч ощупь.

Вы забыли имя associationKey.

Кроме того, нет необходимости переопределять прокси-сервер в магазине, поскольку он наследует прокси-сервер своей модели.

Кроме того, пользователь, вероятно, относится к блоку орг и не один ...