2013-09-05 2 views
0

Я попытался создать очень простое приложение, которое создает хранилище на основе двух связанных моделей. (Он основан на примере, который вы можете найти here.) Это работает, если я использую имя класса берега. Тем не менее, он больше не работает, как только я использую имя класса с контуром и именем приложения, как я привык делать.Ассоциации и имена классов

Я сделал следующие изменения:

  • Изменено "Пессоа" в "Aap.model.Pessoa"
  • Изменено "Endereco" в "Aap.model.Endereco"

Могли кто-нибудь, пожалуйста, объясните мне:

  1. В чем проблема?
  2. Что я должен изменить, чтобы сделать assosiations работать во втором примере

Пример, который работает

app.js:

Ext.Loader.setConfig({ 
    enabled: true, // Allows dynamc loading of JavaSCript files 
    disableCaching: false // Disable random parameter in the URLs path}); 

Ext.application({ 
    name: 'Aap', 
    models: ['Pessoa', 'Endereco']}); 

приложение /model/Pessoa.js:

Ext.define('Pessoa', { 
extend: 'Ext.data.Model', 
fields: [ 
     {name: 'id', type: 'int'}, 
     {name: 'nome', type: 'string'} 
], 
proxy: { 
    type: 'rest', 
    url: 'data/data', 
    format: 'json' 
}, 
      hasOne: {model: 'Endereco', foreignKey: 'pessoaId'} } 

приложение/модели/Endereco.js:

Ext.define('Endereco', { 
extend: 'Ext.data.Model', 
fields: [ 
    {name: 'id', type: 'int'}, 
    {name: 'logradouro', type: 'string'} 
]}); 

данные/data.json:

[ 
{ 
    "id": 1, 
    "nome": "Loiane", 
    "sobrenome": "Groner", 
    "endereco": { 
     "id": 14, 
     "logradouro": "rua ficticia", 
     "numero": "100" 
    } 
}, 
{ 
    "id": 2, 
    "nome": "Tom", 
    "sobrenome": "Stock", 
    "endereco": { 
     "id": 34, 
     "logradouro": "reality street", 
     "numero": "55" 
    } 
}] 

команд в консоли браузера:

pessoaStore = new Ext.data.Store({ 
    autoLoad: true, 
model: 'Pessoa' 
}); 

В результате я получаю магазин с двумя надлежащим образом ассоциированной моделью. Однако, если я изменяю имя класса, ассоциация больше не работает.


Пример, который не работает

app.js:

Ext.Loader.setConfig({ 
    enabled: true, // Allows dynamc loading of JavaSCript files 
    disableCaching: false // Disable random parameter in the URLs path}); 

Ext.application({ 
    name: 'Aap', 
    models: ['Aap.model.Pessoa', 'Aap.model.Endereco']}); 

приложение/модель/Pessoa.js:

Ext.define('Aap.model.Pessoa', { 
extend: 'Ext.data.Model', 
fields: [ 
     {name: 'id', type: 'int'}, 
     {name: 'nome', type: 'string'} 
], 
proxy: { 
    type: 'rest', 
    url: 'data/data', 
    format: 'json' 
}, 
      hasOne: {model: 'Aap.model.Endereco', foreignKey: 'pessoaId'} } 

приложение/модель/Endereco. js:

Ext.define('Aap.model.Endereco', { 
extend: 'Ext.data.Model', 
fields: [ 
    {name: 'id', type: 'int'}, 
    {name: 'logradouro', type: 'string'} 
]}); 

данные/данные.JSON:

[ 
{ 
    "id": 1, 
    "nome": "Loiane", 
    "sobrenome": "Groner", 
    "endereco": { 
     "id": 14, 
     "logradouro": "rua ficticia", 
     "numero": "100" 
    } 
}, 
{ 
    "id": 2, 
    "nome": "Tom", 
    "sobrenome": "Stock", 
    "endereco": { 
     "id": 34, 
     "logradouro": "reality street", 
     "numero": "55" 
    } 
}] 

Команда в консоли браузера:

pessoaStore = new Ext.data.Store({ 
    autoLoad: true, 
    model: 'Aap.model.Pessoa' 
}); 

Здесь я получаю в результате хранилище с данными модели «Пессоа», но модель «Endereco» не связан и Я не могу получить соответствующие данные.

Любая помощь приветствуется!

ответ

0

я понял, проблема:

В "приложение/модели/файла Pessoa.js" Я просто должен был заменить

hasOne: {model: 'Endereco', foreignKey: 'pessoaId'} 

в

hasOne: {model: 'Aap.model.Endereco', associationKey: 'endereco', foreignKey: 'pessoaId'} 

Теперь associaiton работает правильно.

problem the associationKey, который является собственностью для ознакомления с ассоциацией. Как поясняется в ExtJS dcumentation, ассоциация Key по умолчанию является именем связанного moel.

В первом примере (тот, который работал), это сработало хорошо. Ассоциация Key соответствовала названию модели «Endereco» установлен на «endereco» по умолчанию.

В второй пример (тот, который не сработал), однако по умолчанию connectionKey не нашел никакого свойства в данных (app/model/Pessoa.js) с тем же именем. Ассоциация Key соответствовала названию модели «Aap.model.Endereco» установлен на «aap.model.endereco» по умолчанию.

У вас возникла необходимость в создании ассоциацииKey, которая должна быть определена как «endereco», чтобы решить эту проблему.