Construyendo mi aplicación ExtJS 4 siguiendo la estructura MVC. Quiero hacer una grilla extensible MyGrid con alguna funcionalidad que pueda reutilizar varias veces. Por lo tanto, supongo que debería tener su propio controlador, que también se extiende, de modo que la funcionalidad se hereda. ¿Cómo se hace esto correctamente?Controlador de extensión en la aplicación ExtJS 4 MVC
En el siguiente código, se ilustra cómo extiendo el controlador MyGrid con MyExtendedGrid. Me doy cuenta de que estoy sobreescribiendo la función init en el controlador MyGrid, para que nunca se llame. ¿El problema simplemente se resuelve llamando a la "super" init en MyGrid desde MyExtendedGrid init, o combine los objetos de control ? ¿Es esa la manera correcta de hacer esto en el espíritu de MVC? ¿Si es así, cómo?
controlador/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
}
}
});
}
});
controlador/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()
}
});
}
});
Ver/rejillas/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);
}
});
Ver/rejillas/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);
}
});
Gracias, que me dieron un poco de inspiración .. – Louis
@sha De hecho, me encantaría que usted publicar un fragmento de código o dos. –
@LeviHackwith: no hay problema. hagamos esto en una pregunta separada para no confundir esta. ¿Quieres publicar una nueva pregunta? – sha