2010-12-28 17 views
5

W Ext Js chcę, aby niektóre z moich przycisków działały jak łącza (czyli <a href...).Ext Js: przycisk make a link

Jak mogę to zrobić.

W tej chwili dodaję program obsługi, który ma window.location.href=http://.....

Ale myślałem, że powinien istnieć łatwiejszy sposób - coś w rodzaju dodawania atrybutu href jak w pozycji menu.

Kilka pomysłów?

+0

O ile mi wiadomo, tak właśnie należy to zrobić. – Mchl

+0

Dla ExtJS Modern 6.x (6.5) zobacz https://stackoverflow.com/questions/47494458/extjs-6-x-modern-button-as-a-link/47519792#47519792 –

Odpowiedz

7

W ten sposób to zrobić ... Aby być bardziej mobilny można przedłużyć Ext.Button do Ext.ux.LinkButton (lub cokolwiek) i wdrożenie własności i wymaganego zachowania w tej rozszerzonej klasy (tylko Quick-& -Dirty przykład):

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:

Prosta zmiana wyglądu:

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; 
     } 
    } 
}); 
+0

dziękuję. Dlaczego nie może być jak w elemencie menu (więc kiedy użytkownik się unosi, może zobaczyć, gdzie link przeniesie go na pasek stanu) – flybywire

+0

To nie działa w ExtJS 4, czy byłoby trudno zmodyfikować go do pracy w ExtJS4? –