2008-11-24 6 views
0

J'ai une application Web qui utilise Ext-JS 2.2. Dans un certain composant, nous avons une barre d'outils vide que nous essayons d'ajouter un bouton à l'aideAvoir besoin d'une solution de contournement ExtJS

myPanel.getTopToolbar().insertButton(0, [...array of buttons...]); 

Cependant, dans IE6/7 cela échoue en raison de lignes 20241-20242 en ext-all-debug.js:

var td = document.createElement("td"); 
this.tr.insertBefore(td, this.tr.childNodes[index]); 

Depuis "this.tr.childNodes ([0])" n'existe pas encore dans IE, cela ne fonctionne pas avec "argument non valide".

LA QUESTION REAL: Puis-je, en utilisant CSS similaire à l'ajouter ci-dessous un enfant à chaque barre d'outils <tr> de telle sorte que this.tr.childNodes [0] se trouve:

div.x-toolbar tr:after { content: " "; } 

je réalise totalement c'est un hack, mais pour des raisons légales je ne peux pas changer de Javascript, même pas pour ajouter un bouton vide ({}) à chaque barre d'outils. Bravo à tous ceux qui peuvent comprendre cela.

Répondre

0

Je ne pensais pas qu'il y avait une seule solution CSS. Pour l'anecdote, j'ai fini par injecter javascript dans la page qui remplace le prototype Ext.Toolbar pour la fonction insertButton() pour vérifier l'existence de "this.tr.childNodes ([0])" et par défaut addButton() s'il n'existe pas.

1

Si tout ce que vous faites est d'ajouter à un panneau vide

myPanel.getTopToolbar().add(buttons etc); 

Ou

myPanel.getTopToolbar().addButton(..); 

Ou devrait fonctionner. Il semble que but de insertButton est de placer un bouton dans une barre d'outils non vide.

+0

Vous ne devriez pas insérer les boutons avec aisance dans addButtons s'il n'y en a pas? Je pense que nous devons considérer cela comme un bug mineur dans ExtJs ... – Thevs

1

Avez-vous regardé dans l'ajout du bouton après que le panneau a été rendu? Peut-être quelque chose comme:

myPanel.on('render', function() { 
    this.getTopToolbar().insertButton(0, [...array of buttons...]); 
}, true); 
+0

Merci, mais le problème n'était pas le timing. Il s'avère que la fonction insertButton ne fonctionne que s'il y a déjà quelque chose dans la barre d'outils. –

2

Ce que j'ai eu à faire dans le passé était inclure une barre d'outils vide dans ma config élément:

tbar: []

Ensuite (et seulement après l'élément a complètement rendu) utilisez la méthode .add() pour l'injection de boutons.

L'ordre des événements vous arrivera chaque fois. Ça prend du temps pour le maîtriser.

Questions connexes