PDA

View Full Version : URL issue



sencha-dev2
4 Jan 2013, 6:32 AM
Hi all, I have a (new) problem with one of the files I work with. For an undefined reason, it doesn't seem to load conveniently. I spent three entire days on trying to debug that by myself, but I finally give up. I'm unable to fix the problem...

Please, help me. I'll give you the file which is not working, and the Trace given by the Debugger for the Exception. I just can't figure out why it doesn't work, hope you'll be able to...

Here's the file (commented in french while debugging) :



Ext.define('Infologis.view.MoniteurRepas', { // définition du nom de la classe
extend: 'Ext.grid.Panel', // classe qui sert de base à SuiviRepas
itemId: 'gridSuiviRepas', // identifiant local permettant de retrouver l'élément (n'est pas soumis à unicité, contrairement à id)
id: 'moniteurRepas', // identifiant global unique
title: 'Moniteur de Suivi des Repas', // titre du panel
columnLines: true, // permet d'afficher le tracé des colonnes et donc de mieux dissocier les données à l'écran
store: 'SaisiePortage', // le store qui contient les données à afficher dans le tableau
alias: 'widget.moniteurRepas', // raccourci nominal permettant l'appel du composant sans citer le nom de sa classe complète et définissant sa nature (widget, plugin, etc...)
closable: true, // l'onglet dispose d'un bouton de fermeture

// fonction d'initialisation du composant
initComponent: function() {
var me = this;

Ext.applyIf(me, {
columns: [
{
xtype: 'gridcolumn', // colonne simple de tableau, moins spécialisée que les autres types
minWidth: 100, // largeur minimale
maxWidth: 300, // largeur maximale
draggable: false, // ne peut être déplacée
sortable: false, // son contenu ne peut être trié
align: 'center', // tout ce qu'elle contient possède un alignement au centre
dataIndex: 'nomPrenom', // donnée du store à laquelle elle est reliée
flex: 2, // peut s'adapter en taille suivant l'espace disponible (proportionnalité de poids double)
menuDisabled: true, // le menu d'en-tête est indisponible (évite l'affichage de données inintéressantes pour l'utilisateur)
text: 'Bénéficiaire' // texte inscrit dans l'en-tête (il faut respecter les normes d'encodage HTML pour les lettres accentuées)
},
{
xtype: 'gridcolumn',
renderer: function(value, metaData, record, rowIndex, colIndex, store, view) { // fonction qui permet d'intercepter les données avant leur affichage et de construire l'affichage avec diverses propriétés suivant la valeur interceptée
if(value === 0 || value === null) {
metaData.style = 'background-color: #FFC2C2';
return null;
} else {
return value;
}
},
draggable: false,
maxWidth: 100,
sortable: false,
align: 'center',
dataIndex: 'plateauxLundi',
flex: 1, // peut s'adapter en taille suivant l'espace disponible (proportionnalité de poids simple)
menuDisabled: true,
text: 'Lundi',
editor: { // permet de paramétrer le champ affiché par le plugin d'édition par cellules en cas de modifications
xtype: 'numberfield', // champ spécialisé pour les nombres avec un sélecteur de valeur
allowBlank: false, // le champ doit être renseigné pour valider la modification (mais dans ce cas, la valeur null correspond également à 0)
allowDecimals: false, // les nombres décimaux ne sont pas autorisés
decimalPrecision: 0, // donc on n'utilise que les nombres entiers
minValue: 0, // valeur minimale autorisée pour le champ
maxValue: 9 // valeur maximale autorisée pour le champ
}
},
{
xtype: 'gridcolumn',
renderer: function(value, metaData, record, rowIndex, colIndex, store, view) { // fonction qui permet d'intercepter les données avant leur affichage et de construire l'affichage avec diverses propriétés suivant la valeur interceptée
if(value === 0 || value === null) {
metaData.style = 'background-color: #FFC2C2';
return null;
} else {
return value;
}
},
draggable: false,
maxWidth: 100,
sortable: false,
align: 'center',
dataIndex: 'plateauxMardi',
flex: 1, // peut s'adapter en taille suivant l'espace disponible (proportionnalité de poids simple)
menuDisabled: true,
text: 'Mardi',
editor: { // permet de paramétrer le champ affiché par le plugin d'édition par cellules en cas de modifications
xtype: 'numberfield', // champ spécialisé pour les nombres avec un sélecteur de valeur
allowBlank: false, // le champ doit être renseigné pour valider la modification (mais dans ce cas, la valeur null correspond également à 0)
allowDecimals: false, // les nombres décimaux ne sont pas autorisés
decimalPrecision: 0, // donc on n'utilise que les nombres entiers
minValue: 0, // valeur minimale autorisée pour le champ
maxValue: 9 // valeur maximale autorisée pour le champ
}
},
{
xtype: 'gridcolumn',
renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
if(value === 0 || value === null) {
metaData.style = 'background-color: #FFC2C2';
return null;
} else {
return value;
}
},
draggable: false,
maxWidth: 100,
sortable: false,
align: 'center',
dataIndex: 'plateauxMercredi',
flex: 1,
menuDisabled: true,
text: 'Mercredi',
editor: {
xtype: 'numberfield',
allowBlank: false,
allowDecimals: false,
decimalPrecision: 0,
minValue: 0,
maxValue: 9
}
},
{
xtype: 'gridcolumn',
renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
if(value === 0 || value === null) {
metaData.style = 'background-color: #FFC2C2';
return null;
} else {
return value;
}
},
draggable: false,
maxWidth: 100,
sortable: false,
align: 'center',
dataIndex: 'plateauxJeudi',
flex: 1,
menuDisabled: true,
text: 'Jeudi',
editor: {
xtype: 'numberfield',
allowBlank: false,
allowDecimals: false,
decimalPrecision: 0,
minValue: 0,
maxValue: 9
}
},
{
xtype: 'gridcolumn',
renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
if(value === 0 || value === null) {
metaData.style = 'background-color: #FFC2C2';
return null;
} else {
return value;
}
},
draggable: false,
maxWidth: 100,
sortable: false,
align: 'center',
dataIndex: 'plateauxVendredi',
flex: 1,
menuDisabled: true,
text: 'Vendredi',
editor: {
xtype: 'numberfield',
allowBlank: false,
allowDecimals: false,
decimalPrecision: 0,
minValue: 0,
maxValue: 9
}
},
{
xtype: 'gridcolumn',
renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
if(value === 0 || value === null) {
metaData.style = 'background-color: #FFC2C2';
return null;
} else {
return value;
}
},
draggable: false,
maxWidth: 100,
sortable: false,
align: 'center',
dataIndex: 'plateauxSamedi',
flex: 1,
menuDisabled: true,
text: 'Samedi',
editor: {
xtype: 'numberfield',
allowBlank: false,
allowDecimals: false,
decimalPrecision: 0,
minValue: 0,
maxValue: 9
}
},
{
xtype: 'gridcolumn',
renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
if(value === 0 || value === null) {
metaData.style = 'background-color: #FFC2C2';
var str = "Absence justifiée du.... au .... pour cause de......";
metaData.tdAttr = 'data-qtip="' + str + '"';
return null;
} else {
return value;
}
},
draggable: false,
maxWidth: 100,
sortable: false,
align: 'center',
dataIndex: 'plateauxDimanche',
flex: 1,
menuDisabled: true,
text: 'Dimanche',
editor: {
xtype: 'numberfield',
allowBlank: false,
allowDecimals: false,
decimalPrecision: 0,
minValue: 0,
maxValue: 9
}
},
{
xtype: 'gridcolumn',
draggable: false,
maxWidth: 60,
sortable: false,
align: 'center',
dataIndex: 'totalSemaine',
flex: 2,
menuDisabled: true,
text: 'Total'
},
{
xtype: 'gridcolumn',
hidden: true, // la colonne est cachée par défaut
dataIndex: 'idBeneficiaire',
hideable: false, // mais on ne peut changer son état de visibilité
menuDisabled: true,
text: 'idBeneficiaire'
},
{
xtype: 'gridcolumn',
renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
if(value === 'Facturé') {
metaData.style = 'color: green';
} else {
if(value === 'Non traité') {
metaData.style = 'color: red';
} else {
metaData.style = '';
}
}

return value;
},
draggable: false,
maxWidth: 200,
sortable: false,
align: 'center',
dataIndex: 'libelleEtat',
menuDisabled: true,
text: 'Etat'
},
{
xtype: 'actioncolumn', // ce type de colonne est prévu pour contenir des icônes actives
draggable: false,
itemId: 'actionBeneficiaire',
sortable: false,
hideable: false,
menuDisabled: true,
items: [ // chaque élément doit donc disposer d'une image, d'un texte alternatif (si on ne peut afficher l'image), d'une fonction se déclenchant au clic et, éventuellement, d'une bulle d'information
{
handler: function(view, rowIndex, colIndex, item, e, record, row) {
Ext.MessageBox.alert('Info', 'Vous avez cliqué sur "Consulter".');
},
altText: 'Consulter',
icon: 'images/icons/magnifier.png',
tooltip: 'Consulter'
},
{
handler: function(view, rowIndex, colIndex, item, e, record, row) {
Ext.MessageBox.alert('Info', 'Vous avez cliqué sur "Modifier".');
},
altText: 'Modifier',
icon: 'images/icons/edit.png',
tooltip: 'Modifier'
},
{
handler: function(view, rowIndex, colIndex, item, e, record, row) {
Ext.MessageBox.alert('Info', 'Vous avez cliqué sur "Editer".');
},
altText: 'Editer',
icon: 'images/icons/printer.png',
tooltip: 'Editer'
},
{
handler: function(view, rowIndex, colIndex, item, e, record, row) {
Ext.MessageBox.alert('Info', 'Vous avez cliqué sur "Valider".');
},
altText: 'Valider',
icon: 'images/icons/tick.png',
tooltip: 'Valider'
}
]
}
],
plugins: [ // les différents plugins associés au tableau sont définis ici
Ext.create('Ext.grid.plugin.CellEditing', { // ici se trouvent le nom de la classe du plugin,
ptype: 'cellediting', // son raccourci,
clicksToEdit: 1 // et le nombre de cilcs nécessaires pour le déclencher
})
],
dockedItems: [ // ici se trouvent les objets ancrés
{
xtype: 'toolbar', // une barre d'outils
dock: 'top', // ancrée en haut
items: [ // dont les éléments suivent ci-après
{
xtype: 'button', // bouton
cls: 'x-btn-text-icon', // qui dispose d'une classe CSS permettant de mêler texte et image
itemId: 'btnSMoins',
width: 25, // largeur
icon: 'images/icons/arrow_left.png', // et icône
listeners: { // la liste des évènements à surveiller pour l'élément
click: {
fn: me.onBtnSMoinsClick, // la fonction à appeler lors du clic, en l'occurrence
scope: me // et la valeur que this doit représenter au sein de la fonction
}
}
},
{
xtype: 'datefield', // champ de type date
itemId: 'dateDebut',
width: 160,
fieldLabel: 'Semaine du ', // label précédant le champ
labelWidth: 70, // largeur du label
format: 'd/m/Y', // définition du format d'affichage de la date (jour/mois/année complète)
listeners: {
select: { // sur sélection d'une date
fn: me.onDateDebutSelect,
scope: me
},
beforerender: { // avant de créer l'élément
fn: me.onDateDebutBeforeRender,
scope: me
}
}
},
{
xtype: 'datefield',
itemId: 'dateFin',
margin: '0 0 0 5', // on peut spécifier des marges pour les éléments (haut droite bas gauche)
width: 120,
fieldLabel: ' Au ',
labelWidth: 30,
format: 'd/m/Y'
},
{
xtype: 'button',
itemId: 'btnSPlus',
width: 25,
icon: 'images/icons/arrow_right.png',
listeners: {
click: {
fn: me.onBtnSPlusClick,
scope: me
}
}
},
{
xtype: 'container', // un container vide se comporte comme un espacement
width: 10 // qui réagit suivant la largeur qu'on lui attribue
},
{
xtype: 'combobox', // combo, ou liste déroulante
itemId: 'cboEtat',
width: 160,
fieldLabel: 'Etat ',
labelWidth: 40,
displayField: 'libelleEtat', // on spécifie le champ affiché dans la liste
queryMode: 'local', // le mode de requête (permet de saisir dans le champ et de déterminer si la liste est alimentée, puis on s'en sert, ou si l'on doit l'alimenter dynamiquement afin de péserver de l'espace de mémoire, comme dans le cas d'une combo concernant les villes du pays)
store: 'Etat', // le store d'alimentation
valueField: 'idEtat', // on spécifie le champ renvoyé au système
listeners: {
afterrender: { // après création de l'élément
fn: me.onComboboxAfterRender,
scope: me
},
select: { // sur sélection d'un enregistrement
fn: me.onComboboxSelect,
scope: me
}
}
},
{
xtype: 'container',
width: 10
},
{
xtype: 'textfield', // champ texte simple
itemId: 'txtNom',
width: 160,
fieldLabel: 'Nom ',
labelWidth: 40,
enableKeyEvents: true, // on autorise l'écoute de la saisie utilisateur sur ce champ
listeners: {
keyup: { // sur relâchement d'une touche
fn: me.onTextfieldKeyup,
scope: me
}
}
},
{
xtype: 'container',
flex: 1
},
{
xtype: 'button',
icon: 'images/icons/tick.png',
iconCls: 'x-btn-text-icon',
text: 'Valider'
}
]
}
]
});

me.callParent(arguments);
},

// fonction déclenchée par un clic sur le bouton btnSMoins de la toolbar
onBtnSMoinsClick: function(button, e, options) { // l'évènement clic renvoe trois paramètres (le bouton appelant, les informations relatives et les éventuelles options passées)
var date = Ext.ComponentQuery.query('datefield[itemId="dateDebut"]')[0]; // On cherche le premier champ date correspondant pour le référencer dans la variable
var dt = new Date(date.value.getFullYear(), date.value.getMonth(), (parseInt(date.value.getDate(), 10) - 7)); // on crée une date à partir de l'ancienne valeur du champ moins sept jours (l'ajustement est automatique en cas de changement de mois ou d'année)
date.setValue(dt); // on force la valeur du champ sur la nouvelle date
date.fireEvent('select', date, date.getValue()); // et on lance l'évènement de sélection de la date
Ext.ComponentQuery.query('textfield[itemId="txtNom"]').setValue(''); // on réinitialise le champ texte
Ext.ComponentQuery.query('combobox[itemId="cboEtat"]').setValue(0); // et la liste déroulante, afin d'éviter des soucis de filtrage
},

// fonction déclenchée par la sélection d'une date
onDateDebutSelect: function(field, value, options) { // l'évènement de sélection renvoie trois paramètres (l'élément appelant, sa valeur, et les éventuelles options passées)
var headerL = field.up().up().down('gridcolumn[dataIndex="plateauxLundi"]'), // on définit les variables qui vont pointer sur les colonnes
headerM = field.up().up().down('gridcolumn[dataIndex="plateauxMardi"]'),
headerMe = field.up().up().down('gridcolumn[dataIndex="plateauxMercredi"]'),
headerJ = field.up().up().down('gridcolumn[dataIndex="plateauxJeudi"]'),
headerV = field.up().up().down('gridcolumn[dataIndex="plateauxVendredi"]'),
headerS = field.up().up().down('gridcolumn[dataIndex="plateauxSamedi"]'),
headerD = field.up().up().down('gridcolumn[dataIndex="plateauxDimanche"]'),
head = [headerL, headerM, headerMe, headerJ, headerV, headerS, headerD], // on crée un tableau pour stocker les références
jour, // ainsi que deux varibles vides
mois,
dt = new Date(value); // et une qui contiendra un objet Date créé à partir de la valeur du champ

// récupération du jour sélectionné (/mois)
var jourMois = dt.getDate();
// récupération de l'indice du jour dans la semaine
var jourSemaine = dt.getDay();
// création d'une variable qui place le jour de départ au lundi
if(jourSemaine === 0 || jourSemaine === '0') {
jour = jourMois - 7;
} else {
jour = jourMois - jourSemaine + 1; // le +1 est dû à l'indice commencant le dimanche à 0, pour obtenir le lundi il faut donc ajouter un
}

// affectation des dates aux en-têtes de colonnes
for(var i = 0; i < 7; i++) {
var m = 1;
var d = jour + i;
if(dt.getMonth() === 1 || dt.getMonth() === '1') {
if(dt.isLeapYear() && d > 29) {
d = d - 29;
m = 2;
} else {
if(d > 28) {
d = d - 28;
m = 2;
}
}
} else {
if((dt.getMonth() === 3 || dt.getMonth() === '3' ||
dt.getMonth() === 5 || dt.getMonth() === '5' ||
dt.getMonth() === 8 || dt.getMonth() === '8' ||
dt.getMonth() === 10 || dt.getMonth() === '10') && d > 30
) {
d = d - 30;
m = 2;
} else {
if(d > 31) {
d = d - 31;
m = 2;
}
}
}
if(dt.getMonth() + m > 12) {
mois = '01';
} else {
mois = (((dt.getMonth() + m) < 10) ? ('0' + (dt.getMonth() + m)) : (dt.getMonth() + m));
}
head[i].setText(head[i].text.split(' ')[0] + ' ' + d + '/' + mois);
}

Ext.ComponentQuery.query('gridpanel[itemId="gridSuiviRepas"]')[0].store.filterBy(function(record) { // on filtre ici les résultats du store en comparant les dates des résultats avec la valeur du champ
var date = record.get('date').split('/');
var semaine = new Date(date[2], (parseInt(date[1], 10) - 1), date[0]);
semaine = Ext.Date.format(semaine, 'W/o'); // le format 'W/o' permet d'extraire d'une date la semaine et l'année ISO qui la concernent
var s = Ext.Date.format(field.getValue(), 'W/o');
if(semaine === s) return true;
});

Ext.ComponentQuery.query('textfield[itemId="txtNom"]')[0].setValue(''); // on remet à zéro le champ texte
Ext.ComponentQuery.query('combobox[itemId="cboEtat"]')[0].setValue(0); // et la combo pour éviter les problèmes de filtrage
},

// fonction déclenchée par la création du champ date de début (à retravailler pour placer la date du lundi et du dimanche de la semaine)
onDateDebutBeforeRender: function(abstractcomponent, options) { // l'évènement avant création renvoie deux paramètres (l'élément appelant et les éventuelles options passées)
abstractcomponent.setValue(new Date()); // on place dans le composant la date du jour
var dt = new Date();
Ext.ComponentQuery.query('datefield[itemId="dateFin"]')[0].setValue(dt.getFullYear(), dt.getMonth(), (parseInt(dt.getDate(), 10) + 6)); // on place dans le champ date de fin la date du jour plus 6 qui correspond donc au dernier jour du cycle
abstractcomponent.fireEvent('select', abstractcomponent, abstractcomponent.getValue()); // on lance l'évènement de sélection d'une date
},

// fonction déclenchée par le clic sur le bouton btnSPlus
onBtnSPlusClick: function(button, e, options) {
var date = Ext.ComponentQuery.query('datefield[itemId="dateDebut"]')[0];
date.setValue(new Date(date.value.getFullYear(), date.value.getMonth(), (parseInt(date.value.getDate(), 10) + 7)));
date.fireEvent('select', date, date.getValue());
Ext.ComponentQuery.query('textfield[itemId="txtNom"]')[0].setValue('');
Ext.ComponentQuery.query('combobox[itemId="cboEtat"]')[0].setValue(0);
},

// fonction déclenchée par la création de la combo
onComboboxAfterRender: function(abstractcomponent, options) { // afterrender renvoie les mêmes paramètres que beforerender
abstractcomponent.store.insert(0, [{'libelleEtat': 'Afficher tout', 'idEtat': 0}]); // on insère dans le store de la combo l'élément à l'indice de position 0
abstractcomponent.setValue(0); // et on force la valeur de la combo dessus
},

// fonction déclenchée par la sélection d'un élément de données dans la combo
onComboboxSelect: function(combo, records, options) {
Ext.ComponentQuery.query('gridSuiviRepaspanel[itemId="gridSuiviRepas"]')[0].store.filterBy(function(record) {
var date = record.get('date').split('/'); // on récupère la donnée date stockée dans le store sous la forme ('jour/mois/année complète') et on la divise sur tous les caractères '/'
if(combo.getValue() === 0 && Ext.Date.format(new Date(date[2], parseInt(date[1], 10) - 1, date[0]), 'W/o') === Ext.Date.format(Ext.ComponentQuery.query('datefield[itemId="dateDebut"]')[0].getValue(), 'W/o')) { // si les semaines iso et les années iso sont identiques, on laisse l'enregistrement dans le tableau (combo sur afficher tout)
return true;
} else { // dans le cas contraire
if(record.get('idEtat') === combo.getValue() && Ext.Date.format(new Date(date[2], (parseInt(date[1], 10) - 1), date[0]), 'W/o') === Ext.Date.format(Ext.ComponentQuery.query('datefield[itemId="dateDebut"]')[0].getValue(), 'W/o')) { // on vérifie de nouveau l'égalité, en tenant compte de la valeur de l'état' de l'enregistrement
return true;
} else {
return false;
}
}
});
Ext.ComponentQuery.query('textfield[itemId="txtNom"]')[0].setValue(''); // et on réinitialise le champ texte
},

// fonction déclenchée par le relâchement d'une touche dans le champ de saisie
onTextfieldKeyup: function(textfield, e, options) {
if(e.getCharCode() === 13) { // si la touche relâchée est la touche 'Entrée'
Ext.ComponentQuery.query('gridSuiviRepaspanel[itemId="gridSuiviRepas"]')[0].store.filterBy(function(record) {
if(Ext.Date.format(Ext.ComponentQuery.query('datefield[itemId="dateDebut"]')[0].getValue(), 'W/o') === Ext.Date.format(new Date(record.get('date').split('/')[2], parseInt(record.get('date').split('/')[2], 10) - 1, record.get('date').split('/')[0]), 'W/o')) { // que les semaines ISO et les années ISO correspondent et
if(textfield.getRawValue() === '') { // que le champ est vide
return true; // on garde l'enregistrement
} else { // sinon
if(record.get('nomIndividu').substring(0, textfield.getRawValue().length).toUpperCase() === textfield.getRawValue().toUpperCase()) { // si le nomIndividu de l'enregistrement coupé à la longueur de la saisie et la saisie sont identiques (en majuscules pour permettre à tous types de casse de correspondre)
return true; // on garde l'enregistrement
} else { // sinon
return false; // on le retire
}
}
} else {
return false; // si les semaines et années ISO ne correspondent pas, on retire l'enregistrement
}
});
Ext.ComponentQuery.query('combobox[itemId="cboEtat"]')[0].setValue(0); // on réinitialise également la combo des états pour éviter les incohérences
}
}
});


Here's the caller :



var ctrlerPrinc=null;


Ext.define('Infologis.controller.Principal', {
extend: 'Ext.app.Controller',


/** Les vues contrôlées */
views: [
//'Beneficiaire.PanelBeneficiaire',
'menuPrincipal',
'MoniteurRepas'
],

stores: [
'SaisiePortage',
'Etat'
],

models: [
'SaisiePortage',
'Etat'
]


});

function ouvrirOption(id, parent){
if(parent != '' && parent != null) var idParent = parent.id, nomDossier = parent.text.split(" ")[0] + " " + parent.text.split(" ")[1];

switch(id){
case "BeneficiaireRecherche":
// Ouverture de la recherche bénéficiaire
if(!Ext.getCmp('rechercheBeneficiaire'))
{
Ext.getCmp('centre').add(Ext.widget('rechercheBeneficiaire'));
}
Ext.getCmp('centre').setActiveTab('rechercheBeneficiaire');
Ext.getCmp('champRecherche').focus();
break;

case "SuiviRepas":
// Ouverture du moniteur de controle des repas
if(!Ext.getCmp('moniteurRepas'))
{
Ext.getCmp('centre').add(
{
xtype: 'moniteurRepas'
}
);
}
Ext.getCmp('centre').setActiveTab('moniteurRepas');
break;

case "UtilisateurComptes":
if(!Ext.getCmp('ongletUtilisateur'))
{
Ext.getCmp('centre').setVisible(true);
Ext.getCmp('centre').add(Ext.widget('listeUtilisateurs'));
}
Ext.getCmp('centre').setActiveTab('ongletUtilisateur');
break;


case "UtilisateurProfils":
if(!Ext.getCmp('ongletProfilUtilisateur'))
{
Ext.getCmp('centre').setVisible(true);
Ext.getCmp('centre').add(Ext.widget('profilUtilisateur'));
}
Ext.getCmp('centre').setActiveTab('ongletProfilUtilisateur');
break;


case "ParamsRegimes":
if(!Ext.getCmp('ongletParamRegimes'))
{
Ext.getCmp('centre').setVisible(true);
Ext.getCmp('centre').add(Ext.widget('paramregimes'));
}
Ext.getCmp('centre').setActiveTab('ongletParamRegimes');
break;

case "ParamsTarifs":
if(!Ext.getCmp('ongletParamTarifs'))
{
Ext.getCmp('centre').setVisible(true);
Ext.getCmp('centre').add(Ext.widget('paramtarifs'));
}
Ext.getCmp('centre').setActiveTab('ongletParamTarifs');
break;

case "ParamsCivilite":
if(!Ext.getCmp('ongletParamCivilite'))
{
Ext.getCmp('centre').setVisible(true);
Ext.getCmp('centre').add({xtype: 'paramcivilite'});
}
Ext.getCmp('centre').setActiveTab('ongletParamCivilite');
break;

case "ParamsVoies":
if(!Ext.getCmp('ongletParamTypeVoie'))
{
Ext.getCmp('centre').setVisible(true);
Ext.getCmp('centre').add({xtype: 'paramtypevoie'});
}
Ext.getCmp('centre').setActiveTab('ongletParamTypeVoie');
break;

case "EtatCivil"+id.match(/\d+/g):
//La fonction match(/\d+/g) permet de récupérér le contenu numérique d'une chaîne, par conséquent ici, l'id bénéficiaire
if(typeof(Ext.ComponentQuery.query('panel[id="EtatCivil'+idParent.match(/\d+/g)+'"]')[0]) == 'undefined')
{
Ext.getCmp('centre').setVisible(true);
menu.fireEvent('etatCivilBeneficiaire', idParent.match(/\d+/g), nomDossier);
}
Ext.getCmp('centre').setActiveTab('EtatCivil'+idParent.match(/\d+/g));
break;
}
}


And here's the Trace given by the Debugger :



Uncaught TypeError: Cannot call method 'indexOf' of undefined ext-all-debug.js:550

Ext.String.urlAppendext-all-debug.js:550
Ext.apply.urlAppendext-all-debug.js:4252
Ext.define.buildUrlext-all-debug.js:33780
Ext.define.buildRequestext-all-debug.js:33617
Ext.define.doRequestext-all-debug.js:43987
Ext.define.createext-all-debug.js:33572
Ext.define.runOperationext-all-debug.js:31216
Ext.define.startext-all-debug.js:31163
Ext.define.batchext-all-debug.js:33412
Ext.define.syncext-all-debug.js:42116
Ext.define.insertext-all-debug.js:44502
Ext.define.onComboboxAfterRender/portage3/app/view/MoniteurRepas.js?_dc=1357307357668:532
Ext.util.Event.Ext.extend.fireext-all-debug.js:5674
Ext.define.continueFireEventext-all-debug.js:19117
Ext.define.fireEventext-all-debug.js:19095
Ext.override.fireEventext-all-debug.js:51627
Ext.define.finishRenderext-all-debug.js:20432
Ext.define.finishRenderItemsext-all-debug.js:36156
Ext.define.finishRenderext-all-debug.js:67929
Ext.define.finishRenderChildrenext-all-debug.js:68327
Ext.define.afterRenderext-all-debug.js:20159
Base.implement.callParentext-all-debug.js:2541
Ext.define.afterRenderext-all-debug.js:50909
Ext.define.finishRenderext-all-debug.js:20430
Ext.define.finishRenderItemsext-all-debug.js:36156
Ext.define.finishRenderext-all-debug.js:62545
Ext.define.finishRenderChildrenext-all-debug.js:20447
Base.implement.callParentext-all-debug.js:2541
Ext.define.finishRenderChildrenext-all-debug.js:68322
Ext.define.afterRenderext-all-debug.js:20159
Base.implement.callParentext-all-debug.js:2541
Ext.define.afterRenderext-all-debug.js:50909
Ext.define.finishRenderext-all-debug.js:20430
Ext.define.renderext-all-debug.js:20713
Ext.define.renderItemext-all-debug.js:36225
Ext.define.renderItemsext-all-debug.js:36183
Ext.define.renderChildrenext-all-debug.js:71512
Ext.define.invalidateext-all-debug.js:49594
Ext.define.flushInvalidatesext-all-debug.js:49455
Ext.define.runext-all-debug.js:49938
Ext.define.statics.flushLayoutsext-all-debug.js:38577
Ext.define.statics.resumeLayoutsext-all-debug.js:38584
Ext.resumeLayoutsext-all-debug.js:40612
Ext.define.addext-all-debug.js:68500
ouvrirOption/portage3/app/controller/Principal.js?_dc=1357307357637:43
Ext.applyIf.items.listeners.itemclick/portage3/app/view/menuPrincipal.js?_dc=1357307357655:48
Ext.util.Event.Ext.extend.fireext-all-debug.js:5674
Ext.define.continueFireEventext-all-debug.js:19117
Ext.define.fireEventext-all-debug.js:19095
Ext.override.fireEventext-all-debug.js:51627
(anonymous function)ext-all-debug.js:19321
Ext.util.Event.Ext.extend.fireext-all-debug.js:5674
Ext.define.continueFireEventext-all-debug.js:19117
Ext.define.fireEventext-all-debug.js:19095
Ext.override.fireEventext-all-debug.js:51627
Ext.define.processUIEventext-all-debug.js:97767
Base.implement.callParentext-all-debug.js:2541
Ext.define.processUIEventext-all-debug.js:101763
Ext.define.handleEventext-all-debug.js:97681
(anonymous function)
wrapext-all-debug.js:6086




Thanks in advance...

[EDIT]

I noticed that when the file is integrated, even if it's not called, the close icons of the tabpanel are not visible... Maybe can help ?

mitchellsimoens
7 Jan 2013, 10:47 AM
The error actually looks to be the SaisiePortage store. You are inserting a record in it and the store is trying to sync to a server but cannot build the url.

sencha-dev2
27 Feb 2013, 2:32 AM
I see. Thanks for help !