Ext Js: сделать кнопку ссылкой - PullRequest
5 голосов
/ 28 декабря 2010

В Ext Js я хочу, чтобы некоторые из моих кнопок работали как ссылки (т.е. <a href...).

Как я могу это сделать.

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

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

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

Ответы [ 2 ]

7 голосов
/ 28 декабря 2010

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

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"
});

РЕДАКТИРОВАТЬ:

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

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;
        }
    } 
}); 
3 голосов
/ 29 декабря 2010

Существует также существующее расширение пользователя , которое делает именно это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...