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通过类似于我指定的名称(电话)的函数访问关联。

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

4

1 回答 1

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()

您的“名字”字段具有空值的事实是因为您没有实例化您的模型。'telephones()' 函数未如文档中所述自动创建的事实是由于错误的'模型'配置,如本答案开头所述。

希望这可以帮助。

于 2012-05-11T17:33:24.690 回答