使用QucikView扩展TooltipBase会导致错误:' sap.m.Popover id由尚未呈现的控件打开。"

时间:2017-01-04 12:42:12

标签: sapui5 popover

我使用鼠标悬停事件处理扩展了sap.ui.core.TooltipBase并创建了sap.m.QuickView,该sap.m.QuickView附加到一些sap.ui.core.Icon:

    sap.ui.define(function () {
    "use strict";
    return sap.ui.core.TooltipBase.extend("abc.reuseController.TooltipBase", { 
            metadata: {
                events: {
                    "onmouseover" : {}  
                }
            },
            oView: null,

            setView : function(view){
                this.oView = view;
            },

//          the hover event handler, it is called when the Button is hovered - no event registration required
            onmouseover : function() {
                this._createQuickView();
            },

            _createQuickView: function(){
                var view = this.oView;
                alert("Event mouseover.");

//              create QuickViewGroupElement
                var oQuickViewGroupElement = new sap.m.QuickViewGroupElement();
                oQuickViewGroupElement.setLabel("item");
                oQuickViewGroupElement.setValue("value");

//              create QuickViewGroup
                var oQuickViewGroup = new sap.m.QuickViewGroup();
                oQuickViewGroup.addElement(oQuickViewGroupElement);

//              create QuickViewPage
                var oQuickViewPage = new sap.m.QuickViewPage();
                oQuickViewPage.addGroup(oQuickViewGroup);

//              create QuickView
                var oQuickView = new sap.m.QuickView();
                oQuickView.addPage(oQuickViewPage); 

//              connect QuickView with Button
                oQuickView.openBy(view.byId("filterButton"));                           
            },
        });  
});

在我的控制器中,我将tooltipBase添加到sap.ui.core.Icon,id =" filterButton":

var oTooltipBase = new TooltipBase();           
oTooltipBase.setView(this.getView());   

var oIconFilterButton = this.byId("filterButton");
oIconFilterButton.setTooltip(oTooltipBase);

当我将鼠标悬停在此图标上时,我希望显示QuickView,该图标位于xml中的ChartContainer上:

<suite:customIcons>                 
   <core:Icon id="filterButton" src="sap-icon://drop-down-list" press="onFilterDialogOpen" width="2em"/> 
</suite:customIcons>

将鼠标悬停在此图标上效果很好,提醒(&#34;事件鼠标悬停。&#34;);如图所示,也正确创建了QuickView(我在sap.m.Button上尝试了相同的代码),但是我在sap.ui.core.TooltipBase.extend中遇到了这行错误:

oQuickView.openBy(view.byId("filterButton")); 

Fiddle

来自这个sap库:

enter image description here

这一行d = this._getOpenByDomRef();返回null,但为什么我没有线索:

enter image description here

我不确定是否有人遇到过这个问题,但如果是,我会很高兴。

1 个答案:

答案 0 :(得分:1)

你快到了。只有一个问题。

正如我在下面的问题中提到的:extending-sap-ui-core-icon-with-hover-event-or-mouseover,您的自定义图标将转换为OverflowButton:

sap.suite.ui.commons.ChartContainer.prototype._addButtonToCustomIcons = function(i) {
    var I = i;
    var s = I.getTooltip();
    var b = new sap.m.OverflowToolbarButton({
        icon: I.getSrc(),
        text: s,
        tooltip: s,
        type: sap.m.ButtonType.Transparent,
        width: "3rem",
        press: [{
            icon: I
        }, this._onOverflowToolbarButtonPress.bind(this)]
    });
    this._aCustomIcons.push(b);
}

您可能错过的是未使用自定义图标的ID并为溢出按钮创建新的自动生成的ID(错误)。

因此,溢出按钮ID不是:filterButton,而是一些自动生成的Id。

以下是解决方案:更改您在自定义控件中打开QuickView的代码:

上一个代码:

//              connect QuickView with Button
            oQuickView.openBy(view.byId("filterButton"));

正确代码:

//              connect QuickView with Button
                oQuickView.openBy(this.getParent());

编辑: 在代码中:

 //              connect QuickView with Button
                    oQuickView.openBy(this.getParent());

这是指您的自定义工具提示。当工具提示传递给OverflowButton(上面的代码)时,工具提示父级是溢出按钮。因此,代码:this.getParent()。

另外,我建议您将视图的位置设置为“底部”。 (默认是正确的,它导致了UI问题)。

//              create QuickView
                var oQuickView = new sap.m.QuickView({placement:"Bottom"});
                oQuickView.addPage(oQuickViewPage);

enter image description here