我用这行代码在view.xml中定义了一个canvas元素:
<core:HTML content="<div class="wrapper col-6"><canvas id="
myChart"width="800"height="400"></canvas></div>">
</core:HTML>
现在,我想在控制器中获取该元素,但是即使站点成功加载了ID为ID的画布,典型的this.getView().byId("myChart")
似乎也不起作用。
是否可以获取在core:HTML
标签内为控制器定义的那些元素类型?
如果没有,是否有其他方法可以创建画布或其他HTML元素,以便我可以使用ID引用它们或在控制器中使用它们?
答案 0 :(得分:6)
以这种方式创建的元素不会像其他控件一样在UI5框架中“注册”。 byId()
仅检查内部寄存器。
您可以使用jQuery
或标准JavaScript来获取元素,例如$('#myChart')
或document.querySelector('#myChart')
。
您将在Core.js
或Core-dbg.js
中找到此代码。
答案 1 :(得分:3)
就像乔格所说,byId用于获取控件。因此,如果要在HTML控件上放置一个id,则可以检索该控件,然后对其调用getDomRef()以获取最外面的元素,在您的示例中为div。如果您仅将画布放在HTML控件中,那么您会得到的。
如果像Jorg建议的那样直接访问画布的ID,则在页面中两次使用视图时会遇到麻烦,因为画布的ID已不再是唯一的
还有第三个也是恕我直言的更好的选择,那就是在视图内部直接使用html。首先,您需要为其声明一个名称空间,例如
xmlns:html =“ http://www.w3.org/1999/xhtml”
最好在您的View元素上。
然后您可以像这样直接在xml视图中编写html:
<html:div class="wrapper col-6"> <html:canvas id="mycanvas" width="800" height="400"></html:canvas> </html:div>
通过这种方式,您可以获得画布的正确(唯一)ID,并且可以使用this.getView().getDomRef("-mycanvas")
作为视图dom的一部分进行访问。注意额外的前导破折号,因为UI5中的内部ID生成不一致。另请注意,getDomRef()
被认为是受保护的,但是我怀疑它会改变。最后,请记住,您只能获得渲染控件的domref,因此您可能希望从afterRendering事件中访问它。