2011-10-19 79 views
0

我嘗試在ExtJS中創建新對象時遇到了問題。首先我創建一個新對象,然後創建同一個類的另一個對象。在那個班裏,我有一個名爲'form'的財產。這個屬性的類型是'object'。我將在下面顯示:使用ExtJS創建對象時出錯

Ext.define('ExampleClass', { 
    extend: 'Ext.Component', 
    form: { 
     last: null 
    }, 
    initComponent: function() { 
     if(this.form.last == null) { 
      this.form.last = this; 
     } 
     else { 
      console.log(this.form); 
     } 
     this.callParent(arguments); 
    } 
}); 

的代碼很簡單。當我創建第一個對象時,確定。當我創建第二個對象時,控制檯顯示第一個對象(輸入else條件)。只有當我有一個對象作爲類的一個屬性時纔會發生這種情況。這可能是Ext的一個bug,或者我真的需要在每次創建新對象時克隆類中的所有對象?

回答

2

您需要在initComponent中創建表單,因爲您需要爲每個ExampleClass實例分別創建一個實例。

initComponent: function() { 
    this.form = { 
     last: null 
    }; 
    ... 

在你目前的實現中,只有一個form對象,因爲Ext.define只調用一次。然後在實例上將對現有對象的引用傳遞給實例。

+0

換句話說,OP創建窗體的方式,它存儲在'ExampleClass'的原型中,並被所有實例共享。我從不向原型添加任何不是字符串,數字或布爾值的對象以避免此錯誤。 –

+0

我現在正在我的所有應用程序中執行此操作。刪除所有不是字符串,數字或布爾值的屬性。感謝你的回答。 –

+0

這不是一個錯誤,它只是繼承在JavaScript中的工作方式。參見http://jsfiddle.net/GseUG/一個簡單的例子。 (但是,這是我經常遇到的常見錯誤) – user123444555621