如何访问模型中的字段

时间:2012-05-11 13:44:06

标签: sencha-touch sencha-touch-2

我正在使用Sencha Touch 2并定义了这样的模型:

Ext.define('csx.model.Profile', {
 extend: 'Ext.data.Model',

 config: {
    fields: [
        {name: 'firstname',type: 'string'},
        {name: 'lastname', type: 'string'},
    ],

    hasMany: [
        {model: 'Telephone', name: 'telephones'},
        {model: 'Email', name: 'emails'},
    ],
 },

 doSomething: function () {
    var firstname = this.get('firstname'); //returns null
    var phones = this.telephones(); // throws a TypeError
},

});

在我的函数doSomething中,我试图访问模型的值和与hasMany属性关联的模型。 get函数只返回null,当我尝试访问关联的模型时,我只得到一个TypeError,表示该对象没有电话功能。但是,当我查看有关如何使用模型的Sencha Touch 2指南UsingModels时,它表示hasMany关联可以通过类似于我指定的名称(电话)的功能访问。

那么我该如何访问模型中的字段值和相关模型呢?

1 个答案:

答案 0 :(得分:2)

您应该在模型的'hasMany'配置中更改模型属性以反映模型的全名:

hasMany: [
    {model: 'csx.model.Telephone', name: 'telephones'},
    {model: 'csx.model.Email', name: 'emails'},
],

也就是说,假设您已经按照以下方式定义了电话和电子邮件模型:

Ext.define('csx.model.Telephone', { 
    extend: 'Ext.data.Model',
    config: {
        fields: [
            {name: 'number', type: 'string'},
        ],
 });

Ext.define('csx.model.Email', { 
    extend: 'Ext.data.Model',
    config: {
        fields: [
            {name: 'address', type: 'string'},
        ],
 });

然后,如果您创建“个人资料”模型的实例:

var profile = Ext.create('csx.model.Profile', {firstname:'John',lastname:'Deere'});

您可以像这样访问您的字段:

profile.get('firstname');
profile.get('lastname');
来自hasMany协会的

和'电话'和'电子邮件'商店如下:

profile.telephones()
profile.emails()

您的'firstname'字段具有空值的事实是因为您没有实例化您的模型。 “电话()”功能未按照文档中的说明自动创建的事实是因为本答案开头所解释的“模型”配置错误。

希望这有帮助。