Costruisco la mia applicazione ExtJS 4 seguendo la struttura MVC. Voglio creare una griglia estensibile MyGrid con alcune funzionalità che posso riutilizzare più volte. Quindi, immagino, dovrebbe avere un proprio controller che è anche esteso, in modo che la funzionalità sia ereditata. Come è fatto correttamente?Estendere il controller nell'applicazione MVC ExtJS 4
Nel codice seguente illustro come estendo il controller MyGrid con MyExtendedGrid. Mi rendo conto che sto ignorando la funzione init nel controller MyGrid, in modo che non venga mai chiamata. Il problema è stato risolto semplicemente chiamando il "super" init in MyGrid da MyExtendedGrid init, o unire il controllo oggetti? È questo il modo giusto per farlo nello spirito MVC? Se é cosi, come?
regolatore/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
}
}
});
}
});
regolatore/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()
}
});
}
});
vista/griglie/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);
}
});
vista/griglie/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);
}
});
Grazie, mi hai dato qualche ispirazione .. – Louis
@sha vorrei davvero amarla se si desidera inviare un frammento di codice o due. –
@LeviHackwith: nessun problema. facciamolo in una domanda separata, quindi non confondiamo questo. Vuoi postare una nuova domanda? – sha