2013-08-18 63 views
0

ExtJs中的控制器如何處理事件如下所示?如果所有按鈕點擊都通過控制器,它會減慢很多嗎?ExtJs控制器事件

Ext.define('App.controller.MyResults', { 
    extend : 'Ext.app.Controller', 
    stores : ['Store1', 'Store2'], 
    models : ['MyModel'], 
    views : ['myResults.Grid'] 
}, 

init: function() { 
    this.control({ 
     'button': { 
      click: this.refreshGrid 
     } 
    }); 
} 

);

+2

假設你的'init'方法是在控制器定義之內是否正確? –

回答

3

是的,這就是爲什麼組件選擇器應儘可能具體。在你的情況下,假設myResults.Grid被定義爲:

Ext.define('myResults.Grid', { 
    extend: 'Ext.grid.Panel', // Not necessarily this class 
    alias: 'widget.myresultsgrid', // xtype === 'myresultsgrid' 
    ... 
}); 

您可以定義控制器:

Ext.define('App.controller.MyResults', { 
    extend: 'Ext.app.Controller', 
    ... 
    init: function() { 
     this.control({ 
      'myresultsgrid button': { 
       click: this.refreshGrid 
      } 
     }); 
    } 
}); 

這將確保你的控制器只能看到從MyResults電網按鈕click事件。

+0

'myresultsgrid>按鈕'和'myresultsgrid按鈕'之間的區別是什麼? – javaguy

+2

@javaguy'>'操作員將搜索直接的孩子,即'myresultsgrid'包含的按鈕作爲一級孩子。 'myresultsgrid按鈕'將查找「myresultsgrid」包含的任何按鈕,而不一定是直接的孩子。因此,如果將按鈕放置在停靠在網格頂部的工具欄中,'myresults按鈕'會找到它們,並且您的控制器將獲取它們的事件,但'myresults>按鈕'不會,因爲這些按鈕不會是直接的電網的孩子。請參閱[Ext.ComponentQuery](http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.ComponentQuery)文檔。 –