Extjs 4禁用PagingToolbar的工具提示

时间:2012-08-30 08:46:11

标签: extjs extjs4 extjs-mvc

我将PagingToolbar作为网格的bbar。当工具提示出现时,它会显示在我的可见屏幕下方,这就是垂直滚动显示的原因,但是当它显示时,垂直滚动会占据视口的某个位置,因此自动水平滚动也会显示溢出工具提示。所以基本上我有2个问题。

  1. 垂直滚动显示整个视口,但是带有bbar的网格仅位于南区域,网格已经垂直滚动。是否有某种配置来控制这种行为?

  2. 如何禁用PagingToolbar的工具提示我有以下代码无效(网格定义,删除不相关)。

  3. 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());
                }
            });
        }
    

    但是在这段代码中我得到了这个.bbar是未定义的。为什么?那么什么时候是bbar渲染?

2 个答案:

答案 0 :(得分: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());
        }
    });
}

修改

根据您的上一条评论:您不应该覆盖Grid的afterRender方法,而是将自己注册到aftererender事件,并在调用parent之后的initComponent()中执行此操作,如代码expample的注释中所写

编辑2:

每个按钮上都有一个私有方法可以清除工具提示。您可能知道私有方法仍然可以像任何其他方法一样调用,但在即将发布的框架版本中可以完全更改/删除。其中大多数也无法在API中找到。您正在寻找的方法是clearTip()

在要从中删除工具提示的每个按钮实例上调用它。这应该有用。

我完全已经监督了您的第一个问题:您应该考虑使用autoScroll: false从视口中删除滚动行为,或使用viewConfig: { autoScroll: false, scroll: false }

从网格中禁用滚动行为

答案 1 :(得分:0)

你可以这样做

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