我创建了 3 个类如下
- Ext.mine.TextParent - 从 Textfield 继承
- Ext.mine.child.TextChildA - 从 Ext.mine.TextParent 继承
- Ext.mine.child.TextChildB - 从 Ext.mine.TextParent 继承
这样,Child A 和 Child B 类是兄弟姐妹,因为它们都继承自 Parent 类。
我已经向父类添加了一个新的配置属性作为 testConfig,默认值为{}
.
在initComponent
Child A 类中,我为此 testConfig 分配了一个新键:值 -me.testConfig.childAKey='Child A Value';
现在,有一个表单使用了所有三个文本字段,并且在 textChildB 类型的 afterrender 中,我正在打印它的 testConfig 的值。
由于在 Child B 中未修改 testConfig 的值,因此,预计这应该打印空白对象(因为此 testConfig 的 parent 中的默认值是空白对象)。
但它实际上打印了 Child A 的值。
Child A 和 Child B 是兄弟姐妹,那么 Child A 的值怎么会传给 Child B?
有人可以指导一下这背后的原因吗?
下面是测试用例:
<html>
<head>
<title>Inheritance Test</title>
<link rel='stylesheet' href='resources/extjs/resources/css/ext-all.css' />
<script type='text/javascript' src='resources/extjs/ext-all-dev.js'></script>
<script type='text/javascript'>
//Defining the Parent below
Ext.define('Ext.mine.TextParent', {
extend: 'Ext.form.field.Text',
alias: 'widget.textParent',
testConfig:{}
});
//Defining the Child A below
Ext.define('Ext.mine.child.TextChildA', {
extend: 'Ext.mine.TextParent',
alias: 'widget.textChildA',
initComponent:function(){
var me = this;
me.testConfig.childAKey = 'Child A Value';//Adding the key value to Child A
me.callParent();
}
});
//Defining the Child B below
Ext.define('Ext.mine.child.TextChildB', {
extend: 'Ext.mine.TextParent',
alias: 'widget.textChildB'
});
</script>
<script type='text/javascript'>
Ext.onReady(function(){
Ext.create('Ext.form.Panel', {
title: 'Basic Form',
renderTo: Ext.getBody(),
width: 350,
url: 'save-form.php',
items: [{
xtype: 'textParent',//Creating field for Parent
fieldLabel: 'Text Parent',
flex:1
},{
xtype: 'textChildA',//Creating field for Child A
fieldLabel: 'Text Child A',
flex:1
},{
xtype: 'textChildB',//Creating field for Child B
fieldLabel: 'Text Child B',
flex:1,
listeners:{
afterrender:function(){
/*
**Printing to console the value of testConfig for Child B
**Instead of giving a blank object, it is giving the values of Child A - childKey:Child A Value
**How the value from a sibling got associated with another one?
*/
console.log(this.testConfig);
}
}
}]
});
});
</script>
</head>
<body>
</body>
</html>