2017-02-01 26 views
1

通過qooxdoo 5.0.2(或以前的版本),我子類平板部件和覆蓋_onKeyPress方法。 然後,生成源我得到一個正確的行爲,但與生成構建行爲是不同的。我無法理解一個怪異的行爲,繼承平板部件

我簡化了我的問題,下面是這個例子。 我使用qooxdoo 5.0.2表部件源代碼的子類表部件並覆蓋_onKeyPress方法WITH SAME CODE。 運行該示例,編輯單元格,然後按enter鍵。

使用

var tbl = new qx.ui.table.TableModified(tableModel) 

的行爲是不好的。 使用

var tbl = new qx.ui.table.Table(tableModel) 

該行爲是正確的。

如果你把例如在空白的5.0.2項目,使用qx.ui.table.TableModified,你會得到一個行爲,如果編譯源,而另一個與編譯版本。

這有什麼問題?我的錯誤在哪裏?

Playground example

回答

1

在那裏的Qooxdoo是,按照慣例,protected和private類的成員等的方法或實例變量。受保護的成員以_myProtectedMethod之類的下劃線開頭,私人成員以兩個下劃線開頭,如__myPrivateMethod。受保護的成員不受構建過程的影響並保持原樣。這樣它們可以被派生類覆蓋。

私有成員是由編譯器迷惑性隨機名稱,這樣,試圖訪問私有方法或變量定義他們導致的異常類之外。

在您的遊樂場示例中,您已覆蓋方法_onKeyPress,因爲它本身是受保護的成員,所以本身可以被覆蓋。

但是在重載的代碼中,您使用的私人成員如this.__focusedRow會失敗,因爲在構建版本中,因爲它被混淆,因此不會再有__focusedRow成員。還有像__focusedCol代碼,__selectionManager等更多的私人會員

要成功覆蓋的方法,你已經通過他們的存取,以取代那些私有成員,如this.getFocusedRow()代替this.__focusedRowthis.getFocusedColum()代替this._focusedCol

+0

謝謝。我懷疑它,我需要一個確認,因爲源/構建行爲的事情讓我困惑。現在工作正常。我不知道這個網站如何處理答案資格,我現在必須做的。我將讀到。 – fsaiyuk2002

+0

很高興我能幫到你。如果回答你的問題,請接受我的回答。謝謝。 – level420