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