我已經創建了3類如下問題與繼承
- Ext.mine.TextParent - 從文本字段Inherting
- Ext.mine.child.TextChildA - 從Ext.mine.TextParent Inherting
- 分機.mine.child.TextChildB - 從Ext.mine.TextParent吸入
這樣,Child A和Child B類是兄弟姐妹,因爲它們都是從Parent類中抽取的。
我添加了一個新的配置屬性父級作爲testConfig與defalult值爲{}
。
在兒童類的initComponent
,我已經分配了一個新的密鑰:值這個testConfig爲 - me.testConfig.childAKey='Child A Value';
現在,有哪些是使用所有三個文本框,並在textChildB的一個AfterRender形式類型,我打印它的testConfig的值。
由於testConfig的值在Child B中未被修改,因此預期這應該打印空白對象(因爲此testConfig的父級中的默認值爲空白對象)。
但實際打印從兒童A.
兒童A和兒童B中的值是兄弟姐妹,因此,如何從兒童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>
哦,如果你真的想保持配置選項作爲一個對象,user993553是真正做到這一點的唯一方法,而不會像你在例子中看到的副作用。 – Reimius 2012-07-06 14:41:53
感謝您的詳細解答。我只是想知道這是否違反了OOP中的一般原則,其中兩個兄弟姐妹將被完全相互獨立? – netemp 2012-07-09 10:04:47
理想情況下,您的原始示例可以在OOP模型中工作,但JavaScript的本質限制使得它不完全適合此模型,但Extjs已盡其最大努力做到這一點。 – Reimius 2012-07-09 14:01:43