首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Extjs 5,数据模型关联&加载嵌套数据

Extjs 5,数据模型关联&加载嵌套数据
EN

Stack Overflow用户
提问于 2015-01-25 19:14:46
回答 4查看 5.9K关注 0票数 5

想让这件事成功..。

我想在两个对象模型上加载嵌套数据。

代码语言:javascript
复制
Ext.application({
name : 'MyApp',

launch : function() {


    Ext.define('MyApp.model.Address', {
        extend: 'Ext.data.Model',

        entityName: 'Address',

        fields: [ 

            {
                name: 'id',
                type: 'int'
            },
            {
                name: 'addressLine',
                type: 'string'
            },
            {
                name: 'city',
                type: 'string'
            },
            {
                name: 'created',
                type: 'date',
                dateFormat: 'time',
                persist: false
            }
        ]
    });


    Ext.define('MyApp.model.User', {
        extend: 'Ext.data.Model',

        entityName: 'User',

        fields: [ 
            {
                name: 'id',
                type: 'int'
            },
            {
                name: 'address',
                reference: 'Address'
            },
            {
                name: 'name',
                type: 'string'
            },
            {
                name: 'lastname',
                type: 'string'
            },
            {
                name: 'created',
                type: 'date',
                dateFormat: 'time',
                persist: false
            }
        ]
    });


    var user = new MyApp.model.User({
        "id": 1,
        "name": "Pedro",
        "lastname": "Carbonell",
        "address": {
            "id": 1,
            "addressLine": "Bailen 22",
            "city": "Barcelona",
            "created": 1420668866000
        },
        "created": 1420668866000
    });        

    console.info(user);
    console.info(user.getAddress());

}});

创建用户时没有出现错误,但是当我通过user.getAddress()访问关联数据时,它返回了一个异常:

代码语言:javascript
复制
 Uncaught Error: The model ID configured in data ("[object Object]") has been rejected by the int field converter for the id fieldext-all-debug.js

尝试在模型定义上定义代理(如内存或本地存储),但结果是相同的。

第二小提琴:https://fiddle.sencha.com/#fiddle/h2d

任何帮助都将不胜感激!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-26 19:45:39

解决了,但只有找到这个解决方案:当使用loadRawData.

代码语言:javascript
复制
    var store = new Ext.data.Store({
        model: MyApp.model.User
    });

    store.loadRawData({
        "id": 1,
        "name": "Pedro",
        "lastname": "Carbonell",
        "address": {
            "id": 1,
            "addressLine": "Bailen 22",
            "city": "Barcelona",
            "created": 1420668866000
        },
        "created": 1420668866000
    });        

    console.info(store.first());
    console.info(store.first().getAddress());

这个新小提琴的样本:https://fiddle.sencha.com/#fiddle/h4e

你说得对,下一个有点古怪,非常.

票数 3
EN

Stack Overflow用户

发布于 2015-01-25 21:40:00

我一直在玩你的小提琴里的代码,到目前为止还不能让协会以官方的方式运作。

我使用以下代码模拟了该功能:

代码语言:javascript
复制
Ext.define('MyApp.model.User', {
        extend: 'Ext.data.Model',

        fields: [{
            name: 'id',
            type: 'int'
        }, {
            name: 'name',
            type: 'string'
        }, {
            name: 'lastname',
            type: 'string'
        }, {
            name: 'created',
            type: 'date',
            dateFormat: 'time',
            persist: false
        }],

        getAddress: function() {
            if ('undefined' === this.data.address) {
                return null;
            }
            return Ext.create('Address', this.data.address);
        }
    });

基本上,我已经删除了关联,并创建了一个自定义函数来根据传入的原始数据创建模型记录,如果地址数据不存在而不是null,您也可以返回一个新的空模型。我使用了null,因为它更容易确定您是否有有效的地址记录。

正如前面提到的--这不是官方的方法,我会再玩一把小提琴,一旦我找到了更好的解决方案,这可能会在这段时间里有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2015-01-27 17:43:10

使用原始代码,我做了一些修改,现在它似乎正在工作。

代码语言:javascript
复制
Ext.application({
name : 'MyApp',

launch : function() {


    Ext.define('MyApp.model.Address', {
        extend: 'Ext.data.Model',

        //entityName: 'Address',

        fields: [ 

            {
                name: 'id',
                type: 'int'
            },
            {
                name: 'addressLine',
                type: 'string'
            },
            {
                name: 'city',
                type: 'string'
            },
            {
                name: 'created',
                type: 'date',
                dateFormat: 'time',
                persist: false
            }
        ],

        hasMany: 'User'
    });


    Ext.define('MyApp.model.User', {
        extend: 'Ext.data.Model',

        //entityName: 'User',

        fields: [ 
            {
                name: 'id',
                type: 'int'
            },
            {
                name: 'name',
                type: 'string'
            },
            {
                name: 'lastname',
                type: 'string'
            },
            {
                name: 'created',
                type: 'date',
                dateFormat: 'time',
                persist: false
            }
        ], 

        hasMany: { model: 'Address', name: 'Address' }
    });


    var user = new MyApp.model.User({
        "id": 1,
        "name": "Pedro",
        "lastname": "Carbonell",
        "address": {
            "id": 1,
            "addressLine": "Bailen 22",
            "city": "Barcelona",
            "created": 1420668866000
        },
        "created": 1420668866000
    });        

    console.info(user);
    console.info(user.data.address);

}
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28140379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档