如何获取片段中隐形元素的id?

时间:2017-08-22 04:01:47

标签: sapui5

我有一个片段中的对话框:

<core:FragmentDefinition
    xmlns="sap.m"
    xmlns:f="sap.ui.layout.form"
    xmlns:core="sap.ui.core">
    <Dialog title="{i18n>AddNewItem}" resizable="true" draggable="true">
        <content>
            <MessageStrip
                id="failMsg"
                visible="false"
                text="{i18n>SensorTypesCreateFail}"
                type="Error"
                showIcon="true"/>
    </Dialog>
</core:FragmentDefinition>

UI5 doc中一样:

  

当片段不是视图的一部分时检索控件实例:

     
      
  • 当没有给出片段ID时:myControl = sap.ui.getCore()。byId(“myControl”)

  •   
  • 当给出片段ID myFrag时:myControl = sap.ui.core.Fragment.byId(“myFrag”,“myControl”)

  •   

如果没有visible="false",我可以通过sap.ui.getCore().byId("failMsg")获取此MessageStrip。

但我发现使用visible="false"时,MessageStrip的ID为sap-ui-invisible-failMsg,我找不到合适的API来获取它。

当然我可以使用sap.ui.getCore().byId("sap-ui-invisible-failMsg"),但我不确定在将其部署到FLP之后是否会更改此ID,并且@schnoedel在another question中说:

  

请注意框架使用的前缀如 - 和---将来可能会发生变化。这就是为什么建议使用框架提供的公共api函数,如byId()和createId()。

那么,有没有更好的方法来获得它?

更新

更改我的代码:

this[dialogName] = sap.ui.xmlfragment("namespace." + dialogName, this);
this.getView().addDependent(this[dialogName]);

this[dialogName] = sap.ui.xmlfragment(dialogName, "namespace." + dialogName, this);
this.getView().addDependent(this[dialogName]);

现在我的身份证明是sap-ui-invisible-dialogName--failMsg ...

2 个答案:

答案 0 :(得分:0)

取决于获取ID后您想要达到的目标。如果您只想更改属性,则可以通过模型在没有任何ID的情况下进行更改。

为此,您可以将一个Model字段(即baseModel&gt; / visable)分配给visable属性,一旦它被更改,您可以更改模型并通过双向绑定更新控件。 更改模型的代码: this.getView()。getModel(&#34; nameOfUrModel&#34;)。setProperty(&#34; property&#34;,&#34; value&#34;)

有关此内容的更多信息,请查看演练教程 https://sapui5.hana.ondemand.com/

如果你出于某种原因真的需要这个ID: https://sapui5.hana.ondemand.com/#docs/api/symbols/sap.ui.core.Fragment.html 在这里你找到命令: sap.ui.core.Fragment.byId(sFragmentId,sId) 它应该能够使用

返回Control

希望有所帮助 埃里克

答案 1 :(得分:0)

你非常接近解决方案。在片段ID的创建中添加dialogName后,您只需调用API ...:

sap.ui.require(["sap/ui/core/Fragment"], Fragment => Fragment.byId(dialogName, "failMsg"));

...获取所提到的控件实例here

但是,无论您是否提供了片段ID,您都可以随时轻松忽略render prefix "sap-ui-invisible-" - 这意味着您也可以通过{获取控件实例{1}}代替sap.ui.getCore().byId("failMsg"),即使控件不可见。