2010-12-28 2 views
5

In Ext Js Я хочу, чтобы некоторые из моих кнопок работали как ссылки (т. Е. <a href...).Ext Js: make button link

Как это сделать.

Сейчас я добавляю обработчик, который делает window.location.href=http://.....

Но я думал, что должен быть более простой способ - что-то вроде добавления атрибута href, как в пункте меню.

Некоторые идеи?

+0

Насколько я знаю, на самом деле это так, как это должно быть сделано. – Mchl

+0

Для ExtJS Modern 6.x (6.5) см. Https://stackoverflow.com/questions/47494458/extjs-6-x-modern-button-as-a-link/47519792#47519792 –

ответ

3

Существует также существующий user extension, который выполняет именно это.

7

Вот как это делается ... Для того, чтобы быть более портативными вы можете расширить Ext.Button в Ext.ux.LinkButton (или любой другой), и осуществлять имущественные и требуемое поведение в этом расширенном классе (только быстродействую- & -dirty пример):

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:

Простое изменение внешности:

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

спасибо. Почему это не похоже на пункт меню (поэтому, когда пользователь зависает, он может видеть, где ссылка приведет его в строку состояния) – flybywire

+0

Это не работает в ExtJS 4, было бы сложно изменить его для работы в ExtJS4? –