通过非SAPUI5控件打开UI5快速查看

时间:2015-08-06 17:25:40

标签: d3.js sapui5

我试图将UI5与其他库(即D3)集成,并且无法通过我的控件打开UI5 Popover(或quickview)。

我打开popover的唯一方法是.openBy(control)。

根据UI5文档:Control =这是Popover将被放置的控件。它不仅可以是UI5控件,还可以是现有的DOM引用。

我已尝试过多项内容,但无法成功打开popover。我继续在sap-ui-core.js中出错。

有没有人对如何正确传递非UI5控件的DOM引用有任何想法?

以下是一段代码片段,展示了我想要完成的任务:

    function openQuickView(circleClicked){ <--circleClicked is the SVG element clicked on the map
        quickViewPage.setHeader(circleClicked.created_by); <--quickView controls are UI5 and were created before this function
        quickView.openBy(d3.select(circleClicked)); <--------ERROR
    };

1 个答案:

答案 0 :(得分:0)

您描述的所有内容似乎都是正确的。 根据{{​​3}},您还可以使用DOM引用作为参数调用openBy

您在代码段中传递的内容不是DOM引用,但它是d3选择。要从选择中获取所需的DOM引用,您必须添加[0][0]documentation of sap.m.Popover)。

function openQuickView(circleClicked) {
  quickViewPage.setHeader(circleClicked.created_by);
  quickView.openBy(d3.select(circleClicked)[0][0]); 
};
编辑:在玩弄提供的小提琴后,我发现了问题。 函数的参数是被点击对象的数据,而不是DOM。 您应该更改单击处理程序和函数,如下所示:

svg.selectAll("circle")
// ...
.on("click", function(d) {
  openQuickView(this, d);
});
function openQuickView(circleClicked, circleData) {
  quickViewPage.setHeader(circleData.created_by);
  quickView.openBy(circleClicked);
}