関連付けられた 2 つのモデルに基づいてストアを作成する、非常に単純なアプリケーションを構築しようとしました。(これは、ここで見つけることができる例に基づいています。) これは、ショア クラス名を使用する場合に機能します。ただし、以前のように、パスとアプリケーション名でクラス名を使用するとすぐに機能しなくなります。
次の変更を加えました。
- 「ペソア」を「Aap.model.Pessoa」に変更
- 「エンデレコ」を「Aap.model.エンデレコ」に変更
誰かが私に説明してもらえますか:
- 根本的な問題は何ですか?
- 2 番目の例で関連付けを機能させるには、何を変更する必要がありますか?
うまくいく例
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']});
アプリ/モデル/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'
});
その結果、適切に関連付けられた 2 つのモデルを持つストアが得られます。ただし、クラス名を変更すると、関連付けが機能しなくなります。
うまくいかない例
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'}
]});
データ/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: 'Aap.model.Pessoa'
});
ここでは、結果として「Pessoa」モデルのデータを含むストアを取得しますが、「Endereco」モデルは関連付けられておらず、対応するデータを取得できません。
どんな助けでも大歓迎です!