我一直在使用ExtJS一段時間,但現在正嘗試將我的項目轉換爲正確使用他們推薦的MVC風格。在initComponent中聲明時沒有調用控制器方法的事件偵聽器
我有一個視圖和一個控制器。我試圖爲boxready聲明一個事件監聽器來調用一個控制器方法。當我在initComponent
內部聲明監聽器時,這不起作用 - 它說,當我期待它在我的控制器中查找該方法時,它無法在我的視圖中找到該方法。
見的jsfiddle這裏例如(相關代碼在MyPanel.js):senchafiddle
我一直在使用ExtJS一段時間,但現在正嘗試將我的項目轉換爲正確使用他們推薦的MVC風格。在initComponent中聲明時沒有調用控制器方法的事件偵聽器
我有一個視圖和一個控制器。我試圖爲boxready聲明一個事件監聽器來調用一個控制器方法。當我在initComponent
內部聲明監聽器時,這不起作用 - 它說,當我期待它在我的控制器中查找該方法時,它無法在我的視圖中找到該方法。
見的jsfiddle這裏例如(相關代碼在MyPanel.js):senchafiddle
無需附加內initComponent聽衆,做聲明:
listeners: {
boxready: 'controllerMethodName'
}
聲明這個直接上你的看法。
你可以像Brandon提出的那樣做。我認爲這也是Sencha在文檔中的含義。
我這樣做有點不同,因爲我不知道關於控制器的觀點。關於你的例子,意思是:視圖不應該知道控制器內部或應該有一個test()函數。看看在控制器內的init():
Ext.define('MyApp.view.MyPanelController', {
extend: 'Ext.app.ViewController',
alias: 'controller.mypanel',
init: function() {
this.getView().on("boxready",this.test, this);
},
test: function() {
Ext.Msg.alert('hi');
}
});
,很少在查看:
Ext.define('MyApp.view.MyPanel', {
extend: 'Ext.form.Panel',
xtype: 'mypanel',
controller: 'mypanel',
html: 'sometext',
title: 'sometitle'
});
這可能有一些缺點,我不知道。
退房此相應sfiddle: https://fiddle.sencha.com/#fiddle/tpm
可以說,VC和觀點在本質上,再加。所以我認爲這樣做是沒有道理的。 –
是的,它們通過「控制器」屬性連接。但我不明白爲什麼視圖應該知道控制器的功能。控制器的工作是根據視圖觸發的操作進行操作,然後相應地更改視圖。如果視圖告訴控制器對事件作出什麼反應,則視圖控制控制器。 –
該視圖並不知道控制器的實現,只是有一個可用於委託的接口。這種耦合失去了,你可以通過簡單的實現相同的方法來輕鬆地改變控制器。 –
建議你閱讀此線程:https://www.sencha.com/forum/showthread.php?300377 –