2012-05-11 5 views
2

I'm с помощью Сенчи Touch 2 и определил модель, как это:Как получить доступ к полю внутри моделей

Ext.define('csx.model.Profile', { 
extend: 'Ext.data.Model', 

config: { 
    fields: [ 
     {name: 'firstname',type: 'string'}, 
     {name: 'lastname', type: 'string'}, 
    ], 

    hasMany: [ 
     {model: 'Telephone', name: 'telephones'}, 
     {model: 'Email', name: 'emails'}, 
    ], 
}, 

doSomething: function() { 
    var firstname = this.get('firstname'); //returns null 
    var phones = this.telephones(); // throws a TypeError 
}, 

}); 

Внутри моей функции doSomething Я пытаюсь получить доступ к значениям модели и модель, связанной с недвижимостью hasMany. Функция get возвращает только null, и когда я пытаюсь получить доступ к связанным моделям, я получаю только TypeError, говорящий, что объект не имеет функции телефона. Но когда я смотрю на руководства Sencha Touch 2 UsingModels о том, как использовать модели, он говорит, что ассоциации hasMany доступны через функцию, похожую на указанное мной имя (телефоны).

Итак, как мне получить доступ к значениям полей и связанным с ними моделям внутри модели?

ответ

2

Вы должны изменить свойства модели в конфигурации «hasMany» вашей модели, чтобы отразить полное название вашей модели:

hasMany: [ 
    {model: 'csx.model.Telephone', name: 'telephones'}, 
    {model: 'csx.model.Email', name: 'emails'}, 
], 

То есть, предположим, что вы определили ваши модели телефона и адрес электронной, как это:

Ext.define('csx.model.Telephone', { 
    extend: 'Ext.data.Model', 
    config: { 
     fields: [ 
      {name: 'number', type: 'string'}, 
     ], 
}); 

Ext.define('csx.model.Email', { 
    extend: 'Ext.data.Model', 
    config: { 
     fields: [ 
      {name: 'address', type: 'string'}, 
     ], 
}); 

Затем, если вы создаете экземпляр модели 'Profile':

var profile = Ext.create('csx.model.Profile', {firstname:'John',lastname:'Deere'}); 

вы можете получить доступ к поля, как это:

profile.get('firstname'); 
profile.get('lastname'); 

и «телефоны» и магазины «электронные письма» от hasMany ассоциаций, как это:

profile.telephones() 
profile.emails() 

Тот факт, что ваше поле «Имя» был null - это потому, что вы не создавали экземпляр своей модели. Тот факт, что функция «phones()» не создавалась автоматически, как указано в документах, объясняется неправильной конфигурацией «модели», как объяснялось в начале этого ответа.

Надеюсь, это поможет.

+0

Спасибо, я полностью понял это неправильно. Вероятно, я просто занялся копированием документов, а не замечал свои ошибки. Я тестировал его с правильной конфигурацией, и он работает. – dp1000

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