簡體   English   中英

ExtJS:如何從重寫中調用原始方法?

[英]ExtJS: How to call original method from an override?

如何從覆蓋方法調用原始方法?

我有一個組合框,由於我們不再在該值中支持該值,因此將從其存儲中刪除其中一個值,以防止用戶選擇它。 如果組合框收到該值,我仍然希望該值能夠正確顯示,因為從技術上講,它不是無效的值。 它不再受支持。 為了實現我的目標,我想重寫getDisplayValue()方法,這樣,如果組合框接收到存儲中不再存在的值,我希望重寫方法返回正確的字符串,但是如果它接收到任何內容,其他值,我希望原始方法可以處理它,如下所示:

myCombobox = Ext.create("Ext.form.field.ComboBox",
  {
    // <snip><snip>
    getDisplayValue: function()
      {
        if (this.value == 'removedValue')
          {
            return 'Correct Text';
          }
        else
          {
            // What do I do here to call original getDisplayValue() and return its returned value?
          }
      }
  });

更新
有人發布了一個答案,說要使用this.callParent(arguments); 但是在我發表評論說那行不通之后,他們刪除了答案。 在其他情況下,我可以通過重寫函數的源代碼(從Sencha網站獲得)來實現重寫函數的功能,但是我寧願使用一種涉及實際調用的解決方案如果可能的話,可以使用該函數,因為它的源代碼可以在以后的ExtJS更新中更改(例如,用於錯誤修復),而我的代碼將保持靜態。

(請注意,我稍微更改了代碼以查看值而不是rawValue,因為未必在調用getDisplayValue()時定義了rawValue。)

即使回答了問題,這也是解決問題的另一種更好的方法。 這是ExtJS在其某些內部類中將其稱為父方法的方式。

Ext.create("Ext.form.field.ComboBox", { 
    getDisplayValue: function() {
        if (this.rawValue == 'removedValue') {
            // your logic
            return;
        }
        return Ext.form.field.ComboBox.prototype.getDisplayValue.call(this);
    }
});

如果您使用Ext.define,則在4.1中為callOverridden ,從4.2起為callParent

如果使用Ext.create創建組合框,則callParent不會帶您進入組合框的功能,而是帶至基類(triggerfield?)的功能,這不是您想要的。

我曾經成功使用過的是這樣的:

Ext.create('MyCombo',{
    initComponent:function() {
        var me = this;
        me.callParent(arguments);
        var oldFn = me.getDisplayValue;
        me.getDisplayValue = function() {
            if (this.rawValue == 'removedValue') {
                return 'Correct Text';
            } else {
                oldFn.apply(this, arguments); // What do I do here to call original getDisplayValue() and return its returned value?
            }
        };
    }
});

但是,如果使用Ext.define從默認組合框中派生特殊的組合框,然后使用callParent ,則它要callParent

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM