在帶Ext.app.Controller的control()方法的ExtJS類中,我可以通過控制器的init()方法在通過Ext.ComponentQuery選擇的組件中添加偵聽器。如何使用ExtJS 4中控制器的控制方法更改範圍?
這樣做默認情況下,我的控制器範圍內我的處理函數。有沒有辦法在這裏指定其他範圍?
例如,在這種情況下:
Ext.define('BackOffice.controller.BaseList', {
extend: 'Ext.app.Controller',
refs: [
// some refs
],
init: function() {
this.control({
'bo-list-view > toolbar > button[action=create-new]': {
click: this.onCreateNewClick
},
'bo-list-view > toolbar > button[action=edit]': {
click: this.onEditClick
},
'bo-list-view > toolbar > button[action=refresh]': {
click: this.onRefreshClick
}
})
},
// ...
});
在處理函數我想知道確切的按鈕點擊執行基於此信息的一些行動。
我試過在範圍字段的按鈕聲明中指定範圍,這沒有幫助。
另外我想使用Ext.bind()來解決問題,但要綁定函數,我需要再次參考按鈕。
使用.on()添加偵聽器在init()中不起作用,因爲它在應用程序的啓動方法之前調用。
有沒有任何方法可以將監聽器添加到控制器保存範圍的按鈕?
更新
到按鈕的引用是作爲第一個參數到處理函數傳遞。 這解決了我的問題,但仍在尋找一種方法來定義control()方法內的作用域。
Ahh this()真是太遺憾了,我在最後時刻快速編輯了代碼並錯過了它,謝謝提及將修復示例。 – turan
關於添加「scope:this」,在control()方法中不起作用,它說我只能在那裏指定處理程序。 在這種情況下使用第一個參數的按鈕,但不適用於沒有此功能的一些自定義第三方組件,所以我仍然有問題 – turan
我絕對在我的很多控制器中使用'scope:this'。但實際上這樣做是爲了將範圍恢復到控制器類。如果你想指定某個按鈕作爲範圍 - 你甚至可以檢測到你需要的元素?你正在使用refs來訪問它。 – sha