我试图将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
};
答案 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);
}