D3.js 通过非SAPUI5控件打开UI5 Quickview

D3.js 通过非SAPUI5控件打开UI5 Quickview,d3.js,sapui5,D3.js,Sapui5,我试图将UI5与其他库(即D3)集成,但无法通过控件打开UI5 Popover(或quickview) 我可以调用的打开popover的唯一方法是.openBy(控件) 根据UI5文档:Control=这是Popover将放置到的控件。它不仅可以是UI5控件,还可以是现有的DOM引用 我尝试了多种方法,但无法成功打开popover。我在sap-ui-core.js中继续遇到错误 有人对如何正确传递非UI5控件的DOM引用有什么想法吗 下面是一段代码片段,显示了我试图完成的任务: func

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

我可以调用的打开popover的唯一方法是.openBy(控件)

根据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
    };

函数openQuickView(circleClicked){您描述的一切似乎都是正确的。 根据,还可以使用DOM引用作为参数调用
openBy

您在代码段中传递的不是DOM引用,而是d3选择。要从选择中获取所需的DOM引用,您必须添加
[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);
}

你所描述的一切似乎都是正确的。 根据,还可以使用DOM引用作为参数调用
openBy

您在代码段中传递的不是DOM引用,而是d3选择。要从选择中获取所需的DOM引用,您必须添加
[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);
}

感谢您的回复,不幸的是,上面的代码仍然导致SAPUI5核心中出现错误:Uncaught TypeError:i.replace不是一个函数。我只使用
oPopover.openBy(document.getElementById(“target”)对其进行了测试
。你确定你的选择不是空的吗?你能添加一个链接到你的代码的工作示例吗?我花了一段时间才上传了小提琴。这是我的代码:希望我的SVG和JSON文件加载正确-应该在外部资源下。谢谢你的帮助!!!!现在正在工作,我非常感谢你的帮助-干得好。谢谢你的帮助很遗憾,您的回答是,上面的代码仍然导致SAPUI5核心中出现错误:Uncaught TypeError:i.replace不是一个函数。很好,我只使用
oPopover.openBy(document.getElementById(“target”)对其进行了测试
。你确定你的选择不是空的吗?你能添加一个链接到你的代码的工作示例吗?我花了一段时间上传了小提琴。这是我的代码:希望我的SVG和JSON文件加载正确-应该在外部资源下。谢谢你的帮助!!!!现在可以了,我非常感谢你的帮助-干得好。我有一个sim卡我的一个应用程序中出现了ilar情况。我花了很长时间让它与Popover一起工作,但面临越来越多的问题。我所做的是用D3控制一个div容器(具有唯一Id),一旦我想打开Popover(在我的例子中是一个工具提示)我只需调用UI5控件的
.placeAt
,将其注入div容器。div容器的坐标由D3的事件坐标控制。我在一个应用程序中遇到过类似的情况。我花了很长时间让它与Popover一起工作,但面临越来越多的问题。我所做的是控制一个div容器er(具有唯一Id)和D3,一旦我想打开popover(在我的例子中是一个工具提示),我只需调用UI5控件的
.placeAt
,将其注入div容器。div容器的坐标由D3的事件坐标控制。