Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sapui5 获取在core:html中通过其ID定义的元素_Sapui5 - Fatal编程技术网

Sapui5 获取在core:html中通过其ID定义的元素

Sapui5 获取在core:html中通过其ID定义的元素,sapui5,Sapui5,我使用此行在my view.xml中定义了一个canvas元素: 现在我想在控制器中获取元素,但是典型的this.getView().byId(“myChart”)似乎不起作用,即使站点成功地加载了具有该ID的画布 有没有办法在控制器的core:HTML标记中定义这些类型的元素 如果没有,是否有其他方法来创建画布或其他HTML元素,以便我可以使用ID引用它们/在控制器中使用它们?以这种方式创建的元素不会像其他控件那样在UI5框架中“注册”byId()仅检查内部寄存器 您可以使用jQuery或

我使用此行在my view.xml中定义了一个canvas元素:


现在我想在控制器中获取元素,但是典型的
this.getView().byId(“myChart”)
似乎不起作用,即使站点成功地加载了具有该ID的画布

有没有办法在控制器的
core:HTML
标记中定义这些类型的元素


如果没有,是否有其他方法来创建画布或其他HTML元素,以便我可以使用ID引用它们/在控制器中使用它们?

以这种方式创建的元素不会像其他控件那样在UI5框架中“注册”
byId()
仅检查内部寄存器

您可以使用
jQuery
或标准JavaScript来获取元素,比如
$(“#myChart”)
document.querySelector(“#myChart”)


您将在或
Core dbg.js

中找到这方面的代码,正如Jorg所说,byId用于检索控件。因此,如果要在HTML控件上放置id,可以检索该控件,然后对其调用getDomRef(),以获取最外面的元素,在您的示例中是div。如果进一步只将画布放在HTML控件内,则会得到该元素

如果您像Jorg建议的那样直接访问画布的id,那么如果您在页面中使用视图两次,您将遇到麻烦,因为画布的id不再是唯一的

还有第三个也是最好的选择,那就是在视图中直接使用html。首先,您需要为它声明一个名称空间,如

xmlns:html=”http://www.w3.org/1999/xhtml"

最好就在视图元素上

然后可以在xml视图中直接编写html,如下所示:



这样,您就为画布获得了一个正确的(唯一的)id,并且可以使用
This.getView().getDomRef(“-mycanvas”)
作为视图dom的一部分来访问它。请注意额外的前导破折号,因为UI5中的内部id生成不一致。还要注意,
getDomRef()
被认为是受保护的,但我怀疑它是否会改变。最后,请记住,您只能获取渲染控件的domref,因此您可能希望从afterRendering事件访问它。

这是XML视图上html画布的更好实现。也许你可以进一步说明为什么在这种情况下需要额外的前导破折号?谢谢
<html:div class="wrapper col-6">
  <html:canvas id="mycanvas" width="800" height="400"></html:canvas>
</html:div>