Dans notre application ExtJS
, nous avons quelques menus et un panneau d'onglets. Un clic sur une menuItem
ouvre une grille.
nous avons une exigence selon laquelle l'utilisateur peut ouvrir un écran contenant une grille dans l'un des deux modes:
tabpanel
.window.open
et l’ensemble La bibliothèque ExtJS est chargée en premier, puis la grille est chargée. Popup en tant que fenêtre du navigateur est de faciliter plusieurs moniteurs .Le problème est donc que chaque fois que nous ouvrons une fenêtre contextuelle, la bibliothèque ExtJS est nécessaire et que cela prend beaucoup de mémoire dans IE.
Existe-t-il un autre moyen de charger une fenêtre contextuelle de la fenêtre du navigateur avec une grille ExtJS sans charger l'ensemble de la structure ExtJS?
Toute autre idée est la bienvenue, car nous sommes vraiment confrontés à de nombreux problèmes de mémoire dans IE et les utilisateurs ne souhaitent pas utiliser Chrome.
Merci d'avance.
Il n'est pas possible de charger une grille dans une nouvelle fenêtre sans charger d'abord le framework Ext (ou au moins les pièces requises pour une grille) dans la nouvelle fenêtre. Vous ne pouvez pas accéder à la copie du framework ExtJS de la fenêtre parente et l'utiliser car ExtJS nécessite que les composants soient dans la même fenêtre pour fonctionner correctement. Cela est dû en partie à la sécurité du navigateur, qui interdit de copier ou de partager certaines structures entre fenêtres, et en partie à l’architecture ExtJS.
En ce qui concerne la sécurité du navigateur, cela peut même causer des problèmes lorsque vous copiez simplement le contenu de la grille. Assurez-vous de tester tous les navigateurs. La copie de données entre les fenêtres peut vous obliger à sérialiser et à désérialiser pour fonctionner dans tous les navigateurs. Par exemple, je ne pouvais pas copier de simples dates JavaScript entre une fenêtre de navigateur et une iframe dans Chrome, elles sont apparues null
. J'ai dû sérialiser les enregistrements, les transmettre et les désérialiser à nouveau:
var serializedRecords = dataStore.getRange().map(function(record) {
return record.getData({serialize:true, persist:true}); // <- serialization required
});
iframe.contentWindow.Ext.getStore("DataStore").
loadRawData(serializedRecords); // <- loadRawData deserializes records
},
Qu'en est-il de l'exécution
var popupWin = window.open('...');
popupWin.Ext = window.Ext;
et ne charge pas ExtJs
dans la fenêtre enfant
Il existe un outil appelé Sencha CMD. Il peut être nécessaire de ne créer que les parties de Ext js définies comme dépendances (section obligatoire dans les définitions de composant). Ainsi, tous les autres composants fournis avec Ext JS seront ignorés . Vous devez télécharger les sources Ext Js et comprendre comment utiliser cet outil.