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

时间:2018-11-21 21:20:57

标签: sapui5

我用这行代码在view.xml中定义了一个canvas元素:

<core:HTML content="&lt;div class=&quot;wrapper col-6&quot;&gt;&lt;canvas id=&quot;
myChart&quot;width=&quot;800&quot;height=&quot;400&quot;&gt;&lt;/canvas&gt;&lt;/div&gt;"> 
</core:HTML>

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

是否可以获取在core:HTML标签内为控制器定义的那些元素类型?

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

2 个答案:

答案 0 :(得分:6)

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

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

您将在Core.jsCore-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事件中访问它。