comment reconfigurer la grille avec de stocker et de colonnes
Je suis en train d'écrire un générique composant du panneau avec un champ de recherche de texte, un bouton de recherche et une grille présentant les résultats. Ce que je recherche est un composant générique et vous pouvez créer différentes instances de celle-ci avec plus ou moins de colonnes, différents titres de colonne et différente de la logique de recherche.
J'ai créé ExtJS4 code avec Sencha Architect 2 où ce genre de choses se présente comme suit:
initComponent: function() {
var me = this;
Ext.applyIf(me, {
items: [
{
xtype: 'textfield',
itemId: 'txtObjSearch',
fieldLabel: 'Search for'
},
{
xtype: 'button',
itemId: 'btnSearch',
icon: '/rhidmoplus/icons/zoom.png',
text: 'Search'
},
{
xtype: 'gridpanel',
itemId: 'gridResultObjects',
title: '',
store: 'testStore',
colspan: 2,
columns: [
{
xtype: 'gridcolumn',
dataIndex: 'MSKEYVALUE',
text: 'ID'
},
{
xtype: 'gridcolumn',
dataIndex: 'DISPLAYNAME',
text: 'Displayname'
}
],
viewConfig: {
itemId: 'gridView'
}
}
]
});
me.callParent(arguments);
},
Le magasin et les 2 colonnes ne sont que des simulacres. Je veux offrir le magasin réel et le réel de configuration de colonne dans le constructeur du composant personnalisé. J'ai trouvé le GridPanel.reconfigurer (http://docs.sencha.com/ext-js/4-1/#!/api/Ext.de la grille.Panneau-méthode-reconfigure) méthode qui semble s'adapter parfaitement à mes besoins.
Toutefois, le code suivant génère une erreur:
////////////////////////
//Prepare store
////////////////////////
//prepare fields and columns
var __fields = [];
var __columns = [];
for (var jj=0; jj<config.columns.length; jj++) {
var item2 = {};
var item = [];
//for fields
item.name = config.columns[jj].title;
__fields.push (item);
//for columns
item2.xtype = 'gridcolumn';
item2.dataIndex = config.columns [jj].dataIndex;
item2.text = config.columns [jj].title;
__columns.push (item2);
}
console.debug ('columns.length = ' + __columns.length + ', fields.length = ' + __fields.length);
var sm = new Ext.selection.RowModel();
//sm.bindComponent (grid.getView ());
var __store = Ext.create ('Ext.data.Store', {
storeId: config.storeId,
fields: __fields,
selModel: sm,
proxy: {
type: 'ajax',
url: '/rhidmo/rest/ktec_js_searchUtils',
reader: {
type: 'json',
root: 'entries'
}
}
});
grid.reconfigure (__store, __columns);
qui est:
Uncaught TypeError: Cannot read property 'longueur' undefined
dans la méthode onLastFocusChanged de la sélection de modèle. Si je passe null comme premier argument de reconfigurer ensuite, cela n'arrive pas, mais je voudrais créer dynamiquement un magasin (sinon, chaque instance de mon composant utilise le même magasin, qui n'est certainement pas bon).
Peut-être que ma configuration de la boutique n'est pas correct, mais je l'ai copié à partir du code Sencha Architect crée, alors ça ne peut être que mauvais.
Merci de tout soupçon.
Cheers
Kai
========================================
Salut, maintenant changé le code:
//prepare fields and columns
var __fields = [];
var __columns = [];
for (var jj=0; jj<config.columns.length; jj++) {
var item2 = Ext.create ('Ext.grid.column.Column', {
dataIndex: config.columns [jj].dataIndex,
text: config.columns [jj].title
});
var item = Ext.create ('Ext.data.Field', {
name: config.columns[jj].title
});
__fields.push (item);
__columns.push (item2);
}
et je reçois toujours le même message d'erreur:
Uncaught TypeError: Cannot read property 'length' of undefined
Ext.define.onLastFocusChangedext-all-debug.js:89284
Ext.define.setLastFocusedext-all-debug.js:59431
Ext.define.clearSelectionsext-all-debug.js:59543
Ext.define.refreshext-all-debug.js:59523
Ext.define.bindext-all-debug.js:59143
Ext.define.bindStoreext-all-debug.js:60584
Ext.define.bindStoreext-all-debug.js:78007
Ext.define.reconfigureext-all-debug.js:78033
Ext.define.configureGenericSearchPanel.js:141
Ext.define.onStoreTestPanelRenderMainController.js:471
fireext-all-debug.js:10658
- Où exactement erreur qui se passe? Pouvez-vous vérifier la pile?
- Il y a deux choses qui me permettrait de corriger avant que vous seriez en mesure de résoudre complètement ce problème. La première, et qu'important, c'est que je conseillerais de le mettre à la
textfield
etbutton
dans untbar
. Le second, qui est le plus important, une colonne de la grille de configuration nécessiteExt.grid.column.Column
et non pas un objet vide (comme votreitem2
). Vous devriez vraiment avoirvar item2 = Ext.create('Ext.grid.column.Column');
et mieux encore, de fournir une config à cette méthode de création plutôt que sur l'ajout de la colonne configs manuellement plus tard. - veuillez voir la description mise à jour
Vous devez vous connecter pour publier un commentaire.
J'ai corrigé. J'ai essayé de le faire dans le rendu de l'événement. Après cela ne fonctionne pas, j'ai ajouté un bouton à la page et a appelé reconfigurer dans le bouton gestionnaire de clic. Qui a bien fonctionné.
Cela m'a conduit à essayer de l'événement afterrender, qui fait le tour.
Merci pour votre aide,
Cheers
Kai