2012-07-17 40 views
1

我想做一些初始化,當我使用Ext.create(「....」)。該對象很簡單,很小,我不想定義它,但是它需要一些來自mixin的方法(在創建組件之前調用)...我該怎麼做?是否有類似於initComponent的Ext.create方法?

+0

我假設你已經嘗試添加initComponent內創建'()'函數? – sha 2012-07-17 11:47:55

回答

2

標準的實例覆蓋


  • 通常情況下,我們會使用Ext.override()Ext.create()後覆蓋適用於一個特定實例類(見docs):

    var myObj = Ext.create('Ext.some.Component', { 
        ... 
    }); 
    
    Ext.override(myObj, { 
        myMethod: function() { 
         // Do something. 
         this.callParent(arguments); // From Ext.some.Component class. 
         // Do something else. 
        } 
    }); 
    
  • this.callParent(arguments)工作正常用於創建

    • 明確通過Ext.override(),或通過Ext.define()

  • 隱含覆蓋

    特例:首要initComponent


    • 由於initComponent方法中被稱爲Ext.create()執行,我們必須在Ext.create覆蓋它。爲了訪問原來的方法,我們必須使用一個變通訪問被覆蓋的方法:

      var myObj = Ext.create('Ext.some.Component', { 
          initComponent: function() { 
           // Do something. 
      
           // Get a reference to the class. 
           var myClass = Ext.getClass(this); 
      
           // Apply the overridden method from the class' prototype. 
           myClass.prototype.initComponent.apply(this, arguments); 
      
           // Do something else. 
          } 
      }); 
      
  • +0

    這導致'stackoverflow'(諷刺:P)錯誤。 'myClass.prototype.initComponent.apply(this,arguments)'調用將遞歸調用同一個函數。 – 2012-08-30 06:28:29

    +0

    它不應該是因爲原型和組件實例上的函數不一樣(請參閱http://jsfiddle.net/VrA4T/)。雖然進一步測試,但似乎這種技術不適用於構造函數方法。 – 2012-08-30 13:12:33

    +0

    嗯..奇怪..在你的例子中工作。在我的情況下,它變得瘋狂。我想ppl應該嘗試一下,看看它是否適合他們的情況。 – 2012-08-30 19:53:59

    2

    這聽起來像你正在做的線沿線的東西:

    Ext.create('Ext.panel.Panel', { 
        prop1: value1, 
        prop2: value2 
    }); 
    

    如果是那樣的話,你應該能夠添加一個名爲initComponent屬性,它是一個函數,你想要做什麼。只記得打電話給原來的initComponent所以一切都得到正確構建:

    Ext.create('Ext.panel.Panel', { 
        prop1: value1, 
        prop2: value2, 
        initComponent: function() { 
         this.doSomething(); 
         Ext.panel.Panel.prototype.initComponent.apply(this, arguments); 
        } 
    }); 
    
    +0

    請注意,'this.callParent(arguments)'與通過'Ext.create'定義的方法不兼容,請參閱我的答案以獲取更多詳細信息。 – 2012-07-17 22:47:59

    +0

    我總是忘記這一點,謝謝Russ。 – 2012-07-18 11:09:26

    +0

    它當然覺得它應該工作! – 2012-07-18 13:31:03

    相關問題