Extjs 关联和类名

Extjs 关联和类名,extjs,extjs4,associations,extjs4.2,classname,Extjs,Extjs4,Associations,Extjs4.2,Classname,我试图构建一个非常简单的应用程序,它基于两个关联的模型创建一个商店。(它基于您可以找到的一个示例。)如果我使用shore类名称,则此方法有效。但是,只要我像以前那样将类名与路径和应用程序名一起使用,它就不再起作用了 我做了以下修改: 将“Pessoa”更改为“Aap.model.Pessoa” 将“Endereco”更改为“Aap.model.Endereco” 谁能给我解释一下: 根本问题是什么 为了使第二个示例中的关联工作,我必须更改什么 有效的示例 app.js: Ext.Loade

我试图构建一个非常简单的应用程序,它基于两个关联的模型创建一个商店。(它基于您可以找到的一个示例。)如果我使用shore类名称,则此方法有效。但是,只要我像以前那样将类名与路径和应用程序名一起使用,它就不再起作用了

我做了以下修改:

  • 将“Pessoa”更改为“Aap.model.Pessoa”
  • 将“Endereco”更改为“Aap.model.Endereco”
谁能给我解释一下:

  • 根本问题是什么
  • 为了使第二个示例中的关联工作,我必须更改什么

  • 有效的示例

    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']});
    
    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']});
    
    app/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'} }
    
    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'} }
    
    app/model/Endereco.js:

    Ext.define('Endereco', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id', type: 'int'},
        {name: 'logradouro', type: 'string'}
    ]});
    
    Ext.define('Aap.model.Endereco', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id', type: 'int'},
        {name: 'logradouro', type: 'string'}
    ]});
    
    data/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"
        }
    }]
    
    [
    {
        "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'
    });
    
    pessoaStore = new Ext.data.Store({
        autoLoad: true,
        model: 'Aap.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: ['Pessoa', 'Endereco']});
    
    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']});
    
    app/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'} }
    
    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'} }
    
    app/model/Endereco.js:

    Ext.define('Endereco', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id', type: 'int'},
        {name: 'logradouro', type: 'string'}
    ]});
    
    Ext.define('Aap.model.Endereco', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id', type: 'int'},
        {name: 'logradouro', type: 'string'}
    ]});
    
    data/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"
        }
    }]
    
    [
    {
        "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'
    });
    
    pessoaStore = new Ext.data.Store({
        autoLoad: true,
        model: 'Aap.model.Pessoa'
    });
    
    在这里,我得到了带有“Pessoa”模型数据的存储,但是“Endereco”模型没有关联,我无法得到相应的数据


    感谢您的帮助

    我解决了问题:

    在“app/model/Pessoa.js文件”中,我只需替换

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

    现在,协会工作正常

    问题是associationKey,它是从中读取关联的属性。如中所述,associationKey默认为关联moel的名称

    第一个示例(有效的示例)中,这非常有效。associationKey与默认设置为“Endereco”的模型名称“Endereco”相对应

    但是,在第二个示例(不起作用的示例)中,默认associationKey在数据(app/model/Pessoa.js)中找不到任何同名的属性。associationKey与默认设置为“Aap.model.Endereco”的模型名称“Aap.model.Endereco”相对应

    因此,associationKey必须明确定义为“endereco”,以解决该问题