我構建了遵循MVC結構的ExtJS 4應用程序。我想用一些可以重複使用的功能來創建可擴展的網格MyGrid。因此,我想,它應該有它自己的控制器,它也被擴展了,所以這個功能是被繼承的。這是如何正確完成的?在ExtJS 4 MVC應用程序中擴展控制器
在下面的代碼中,我演示瞭如何使用MyExtendedGrid擴展控制器MyGrid。我意識到我在覆蓋MyGrid控制器中的init函數,因此它永遠不會被調用。是通過調用MyExtendedGrid中的「超級」初始化從MyExtendedGrid 初始化或合併控制對象簡單地解決的問題?這是MVC精神中做到這一點的正確方法嗎?如果是這樣,怎麼樣?
控制器/ MyGrid.js:
Ext.define('App.controller.MyGrid', {
extend: 'Ext.app.Controller',
refs: [
{
ref: 'myGridView',
selector: 'mygrid'
}
],
init: function() {
var me=this;
me.control({
'mygrid textfield[name=searchField]': {
change: function() {
var view = me.getMyGridView();
// Do something with view
}
}
});
}
});
控制器/ MyExtendedGrid.js:
Ext.define('App.controller.MyExtendedGrid', {
extend: 'App.controller.MyGrid',
views: [
'grids.MyExtendedGrid'],
refs: [
{
ref: 'myExtendedGridView',
selector: 'myextendedgrid'
}
],
init: function() {
var me=this;
me.control({
'myextendedgrid': {
// Some control code
// Using getMyExtendedGridView()
}
});
}
});
視圖/網格/ MyGrid.js:
Ext.define('App.view.grids.MyGrid', {
extend: 'Ext.grid.Panel',
alias : 'widget.mygrid',
requires: [
],
store: '', // Not defined here
columns: [ ], // Not defined here
initComponent: function() {
var me = this;
me.tbar = [
'Search',
{
xtype: 'textfield',
name: 'searchField',
hideLabel: true,
width: 150
}
];
me.callParent(arguments);
}
});
視圖/網格/ MyExtendedGrid .js:
Ext.define('App.view.grids.MyExtendedGrid', {
extend: 'App.view.grids.MyGrid',
alias : 'widget.myextendedgrid',
store: 'MyStore',
columns: [
// ...
],
initComponent: function() {
var me = this;
me.bbar = [
//...
];
me.callParent(arguments);
}
});
謝謝你給了我一些啓發.. – Louis 2012-03-08 15:22:27
@sha我真的喜歡它,如果你發佈的代碼片段或兩個。 – 2012-03-08 21:16:05
@LeviHackwith:沒問題。讓我們在單獨的問題中做這個,所以我們不要混淆這個。想發佈新的問題? – sha 2012-03-08 21:32:23