Extjs 4 Отключить всплывающую подсказку для PagingToolbar

У меня есть PagingToolbar как bbar моей сетки. Когда появляется всплывающая подсказка, она отображается ниже моего видимого экрана, и поэтому появляется вертикальная прокрутка, но когда это происходит, вертикальная прокрутка занимает какое-то место в окне просмотра, поэтому автоматически горизонтальная прокрутка также переполняет всплывающую подсказку. Итак, в основном у меня есть 2 вопроса.

  1. Вертикальная прокрутка отображается для всего окна просмотра, но сетка с bbar находится только в южной области, а сама сетка уже имеет вертикальную прокрутку. Есть ли какая-то конфигурация для управления этим поведением?

  2. Как отключить всплывающие подсказки для PagingToolbar. У меня есть следующий код, который не работает (определение сетки, удалено ненужное).

initComponent: function() {

        var me = this;

        this.store = 'DevPlan';

var paging = Ext.create('Ext.PagingToolbar', {
            store: this.store,
            displayInfo: true,
            displayMsg: 'Wyświetlono wnioski {0} - {1} z {2}',
            emptyMsg: "Brak wniosków do wyświetlenia"
        });

        Ext.each(paging.items.items, function(btn) {
            if (btn.getXType() == 'button' && btn.tooltip != undefined) {
                Ext.QuickTips.unregister(btn.getId());
            }
        });

        this.bbar = paging;

this.callParent(arguments);

Я думаю, что, возможно, приведенный выше код не работает, потому что всплывающие подсказки еще не были зарегистрированы или потому что панель инструментов подкачки не была отображена, поэтому я попытался:

afterRender:function() {

        this.callParent();

        var items = this.bbar.items.items;
        Ext.each(items, function(btn) {
            if (btn.getXType() == 'button' && btn.tooltip != undefined) {
                console.log(btn.getId());
                Ext.QuickTips.unregister(btn.getId());
            }
        });
    }

но в этом коде я получаю, что this.bbar не определен. Почему? Итак, когда отображается bbar?


person patryks    schedule 30.08.2012    source источник
comment
попробуйте установить autoscroll:false в окне просмотра   -  person MMT    schedule 30.08.2012
comment
мне нужно autoScroll в true, есть много путей для работы с приложением и иногда автопрокрутка необходима   -  person patryks    schedule 30.08.2012
comment
установить автопрокрутку в контейнер региона, т.е. панель, вместо области просмотра   -  person MMT    schedule 30.08.2012
comment
Все то же самое, как будто всплывающая подсказка принадлежит не контейнеру, а всему телу страницы   -  person patryks    schedule 30.08.2012
comment
Можете ли вы попробовать переместить раздел each после вызова callParent в вашем методе initComponent().   -  person Izhaki    schedule 30.08.2012
comment
Кроме того, есть ли у вашей сетки методы initComponent() и afterRender()? Что вызывает afterRender()?   -  person Izhaki    schedule 30.08.2012
comment
Перемещение каждого после callParent не помогает. Я не понимаю ваш второй вопрос, afterRender я просто переопределяю подкласс сетки afterRender, и он запускается, когда компонент визуализируется, поэтому он должен иметь определенный bbar (я думаю :))   -  person patryks    schedule 31.08.2012


Ответы (2)


Начиная с ExtJS4, bbar — это всего лишь короткий способ применить панель инструментов/элементы как пристыкованные снизу и сбрасываемые после инициализации, см.

if (me.bbar) {
    docked.push(initToolbar(me.bbar, 'bottom'));
    me.bbar = null;
}

Я думаю, вы можете сделать это так (я ожидал, что это будет событие, поэтому комментарии):

afterrender: function(grid) { 
    // 'this' should not be accessible within a eventcallback! If it is you are within the class definition and should use this.on('beforerender', ...) after the callParent() instead!!
    // callParent() should be called within the init of the class, not somewhere else!
    // this.callParent(); 

    var pagebar = grid.down('pagingtoolbar'),
        items = pagebar ? pagebar.items.items : [],
        len = items.length,
        i = 0;
    // don't use each if it is not really necessary!
    for(;i < len; i++) {
        var item = items[i];
        if (item.getXType() === 'button' && item.tooltip != undefined) {
            console.log(item.getId());
            Ext.QuickTips.unregister(item.getId());
        }
    });
}

Изменить:

На основании вашего последнего комментария: вам не следует переопределять метод afterRender Grid, вместо этого зарегистрируйтесь в событии aftererender и сделайте это в initComponent() сразу после родительского вызова, как написано в комментарии к примеру кода

Редактировать 2:

Для каждой кнопки есть частный метод, который очищает всплывающую подсказку. Как вы, возможно, знаете, закрытые методы по-прежнему можно вызывать, как и любые другие, но они могут быть полностью изменены/удалены в следующих версиях фреймворка. Большинство из них также не могут быть найдены в API. Метод, который вы ищете, это clearTip()

Вызовите его для каждого экземпляра кнопки, из которого вы хотите удалить всплывающую подсказку. Это должно сработать.

Я полностью просмотрел ваш первый вопрос: вам следует рассмотреть возможность удаления поведения прокрутки из области просмотра с помощью autoScroll: false или отключения его из сетки с помощью viewConfig: { autoScroll: false, scroll: false }

person sra    schedule 02.09.2012
comment
Спасибо, sra, я понимаю, почему bbar имеет значение null, но почему я не могу отменить регистрацию всплывающих подсказок в переопределении afterRender? Я протестировал свой код с помощью this.down('pagingtoolbar'), и теперь console.log(item.getId()) возвращает все идентификаторы. Тем не менее отмена регистрации (btnid) не работает - person patryks; 05.09.2012
comment
И это.callParent(); в afterRender переопределение просто вызывает родительскую функцию afterRender, не так ли? - person patryks; 05.09.2012

Вы можете сделать так

{
dock : 'bottom',
xtype : 'pagingtoolbar',
store : store,
pageSize : 25,
displayInfo : true,
firstText:null,
prevText:null,
nextText:null,
lastText:null,
refreshText:null,
....
person chen hao    schedule 14.10.2013