扩展Ext.data.Model的类 - 方法.get和.set的行为与getter / setter相比有所不同

时间:2013-12-12 02:48:13

标签: extjs extjs4

当我通过扩展“Ext.data.Model”类创建模型时,getter / setter方法的行为与data.Model中可用的默认.get和.set方法的行为不同

似乎可以使用getter / setter方法或.get / .set方法,因为它们似乎是维护单独的字段集。

为什么会这样?如果问题看起来很愚蠢,我会认识我,我正在学习Ext JS,试图了解它是如何工作的。我正在使用库版本ExtJS4.2.1

Ext.define("Ext.model.Invoice", {
        extend : "Ext.data.Model",
        fields : [{name : 'id'}, {name : 'taxId'}, {name : 'name'}],
        config : {
            name : 'Tejas',
            taxId : '23746'
        },
        constructor : function(config) {
            this.callParent(arguments);
            this.initConfig(config);
        }
    });

HTML

Ext.onReady(function() {
    var invoice = Ext.create("Ext.model.Invoice");

    console.log("Before, invoice.get('name'):", invoice.get('name'));
    console.log("Before, invoice.getName():", invoice.getName());

    //Modifying name
    invoice.setName("Mr. Smith");
    invoice.set("name","Mr. Tony");
    console.log("Updating names using setName and set('name')");

    console.log("After, invoice.get('name'):", invoice.get('name'));
    console.log("After, invoice.getName():", invoice.getName());

});

输出

Before, invoice.get('name'):
Before, invoice.getName(): Tejas
Updating names using setName and set('name')
After, invoice.get('name'): Mr. Tony
After, invoice.getName(): Mr. Smith

1 个答案:

答案 0 :(得分:1)

使用config配置属性,您可以使用默认值定义配置选项列表,但不能使用默认模型数据。

当对象的实例正在创建时,为config中定义的每个属性自动创建setter和getter方法,并且对象属性与config属性同名。

Ext.data.Model将模型数据存储在其私有data属性中。例如,您可以尝试通过以下方式转储name字段的模型数据:

console.log(invoice.data.name);

因此,通过setter和getter,您可以访问对象属性,但是通过model.get()model.set(),您可以访问存储在模型的私有data属性中的模型数据。