我有一个片段中的对话框:
<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
...
答案 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")
,即使控件不可见。