5 votes

Ext Js : faire du bouton un lien

Dans Ext Js, je veux que certains de mes boutons fonctionnent comme des liens (c'est-à-dire <a href... ).

Comment je peux faire ça.

Pour l'instant, j'ajoute un gestionnaire qui fait window.location.href=http://.... .

Mais j'ai pensé qu'il devait y avoir un moyen plus simple - quelque chose comme l'ajout d'un attribut href comme dans les éléments de menu.

Des idées ?

7voto

Stefan Gehrig Points 47227

C'est comme ça qu'on fait... Pour être plus portable, vous pourriez étendre Ext.Button en Ext.ux.LinkButton (ou autre) et implémenter la propriété et le comportement requis dans cette classe étendue (juste un exemple rapide) :

Ext.ux.LinkButton = Ext.extend(Ext.Button, {
    href: null,
    handler: function() {
        if (this.href) {
            window.location.href = this.href;
        }
    } 
}); 
Ext.reg( "ux-linkbutton", Ext.ux.LinkButton );

var btn = new Ext.ux.LinkButton({
    text: "Link to Google",
    href: "http://www.google.com"
});

EDIT :

Un simple changement d'apparence :

Ext.ux.LinkButton = Ext.extend(Ext.Button, {
    href: null,
    template: new Ext.Template(
        ['<table id="{4}" cellspacing="0" class="x-btn {3}"><tbody class="{1}">',
        '<tr><td class="x-btn-tl"><i>&#160;</i></td><td class="x-btn-tc"></td><td class="x-btn-tr"><i>&#160;</i></td></tr>',
        '<tr><td class="x-btn-ml"><i>&#160;</i></td><td class="x-btn-mc"><em class="{2}" unselectable="on"><a href="{0}"></a></em></td><td class="x-btn-mr"><i>&#160;</i></td></tr>',
        '<tr><td class="x-btn-bl"><i>&#160;</i></td><td class="x-btn-bc"></td><td class="x-btn-br"><i>&#160;</i></td></tr>',
        '</tbody></table>'], {compiled: true}),
    buttonSelector : 'a:first-child',
    getTemplateArgs : function(){
        return [this.href, 'x-btn-' + this.scale + ' x-btn-icon-' + this.scale + '-' + this.iconAlign, this.getMenuClass(), this.cls, this.id];
    },
    handler: function(b, e) {
        if (this.href) {
            e.stopEvent();
            window.location.href = this.href;
        }
    } 
});

3voto

bmoeskau Points 13136

Il y a aussi une extension d'utilisateur qui fait exactement cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X