EXT JS 5:为什么我不能获得我的引用类型的模型对象

时间:2014-09-22 12:13:29

标签: javascript extjs model getter extjs5

我有以下型号:

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


    requires : ['MyApp.model.Item','MyApp.model.User'],


    items : [
        {
            name : 'user',
            mapping : 'user',
            reference : 'MyApp.model.User',
            unique : true
        },
        {
            name : 'item',
            mapping : 'item',
            reference : 'MyApp.model.Item'
        }
    ],


    //******************************
    //*      GETTERS / SETTERS     *
    //******************************
    getUser : function() {
        var me = this;
        return me.get('user');
    },


    getItem: function() {
        var me = this;
        return me.get('item');
    }
});

当我获得用户或项目时,我不会获得用户模型或项目模型,而是获得对象。 如何获取Item模型或User模型而不是Object。

编辑1:

我找到了解决方案,但我不知道它是否是一个很好的解决方案:

Ext.define('MyApp.model.Container', {
    [...]    

    //******************************
    //*      GETTERS / SETTERS     *
    //******************************
    getUser : function() {
        var me = this;
        return new MyApp.model.User(me.get('user'));
    },


    getItem: function() {
        var me = this;
        return new MyApp.model.Item(me.get('item'));
    }
});

编辑2:

在我的第一个例子中,当我加载我的商店时,我得到这个,例如我得到用户:

store
    => getAt(0)
        => data
            => item [...]
            => utilisateur
                => id : '1'
                => name : 'john doe'
                => profil : 'admin'

我想要:

store
    => getAt(0)
        => data
            => item [...]
            => utilisateur
                => $className : "MyApp.model.User"
                => id : '1'
                => name : 'john doe'
                => profil : 'admin'
                => (others properties of model object)
                => (getters and setters functions)

编辑3:

抱歉...我的问题是我使用的是我的现场声明项目而不是字段................

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


    requires : ['MyApp.model.Item','MyApp.model.User'],


    fields : [
        {
            name : 'user',
            mapping : 'user',
            reference : 'MyApp.model.User',
            unique : true
        },
        {
            name : 'item',
            mapping : 'item',
            reference : 'MyApp.model.Item'
        }
    ],


    //******************************
    //*      GETTERS / SETTERS     *
    //******************************
    getUser : function() {
        var me = this;
        var user = me.user;
        if(user) {
            return user;
        } else {
            return null;
        }
    },

    getItem: function() {
        var me = this;
        var item = me.item;
        if(item) {
            return item;
        } else {
            return null;
        }
    }
});

问候。

2 个答案:

答案 0 :(得分:0)

参考字段已经在存储模型的文件夹中查找,因此您只需要修复参考配置。

items : [
    {
        name : 'user',
        mapping : 'user',
        reference : 'User', <---
        unique : true
    },
    {
        name : 'item',
        mapping : 'item',
        reference : 'Item' <--
    }
]

您也不需要定义函数来获取模型,因为Ext会自动添加getUser()和getItem()。

答案 1 :(得分:-2)

要获得答案,请注意配置名称并查看第三个编辑。