当我通过扩展“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
答案 0 :(得分:1)
使用config
配置属性,您可以使用默认值定义配置选项列表,但不能使用默认模型数据。
当对象的实例正在创建时,为config
中定义的每个属性自动创建setter和getter方法,并且对象属性与config属性同名。
Ext.data.Model
将模型数据存储在其私有data
属性中。例如,您可以尝试通过以下方式转储name
字段的模型数据:
console.log(invoice.data.name);
因此,通过setter和getter,您可以访问对象属性,但是通过model.get()
和model.set()
,您可以访问存储在模型的私有data
属性中的模型数据。