Sapui5 如何通过ID从弹出窗口片段访问控制

Sapui5 如何通过ID从弹出窗口片段访问控制,sapui5,Sapui5,我想我的文本区域是空的后,我按下确定按钮 我尝试了这一行this.byId(“id”).setValue(“” onWorkInProgress:函数(oEvent){ 如果(!this.\u oOnWorkInProgressDialog){ 此.uoonWorkinProgressDialog=sap.ui.xmlfragment(“WIPworklist”、“com.sap.FinalAssestments.view.WorkInProgress”,此); //此.byId(“WIP”).

我想我的文本区域是空的后,我按下确定按钮

我尝试了这一行
this.byId(“id”).setValue(“”

onWorkInProgress:函数(oEvent){
如果(!this.\u oOnWorkInProgressDialog){
此.uoonWorkinProgressDialog=sap.ui.xmlfragment(“WIPworklist”、“com.sap.FinalAssestments.view.WorkInProgress”,此);
//此.byId(“WIP”).value=“”;
//这个.byId(“WIP”).setValue();
this.getView().addDependent(this.oOnWorkInProgressDialog);
}
var bindingPath=oEvent.getSource().getBindingContext().getPath();
此.uoonWorkinProgressDialog.bindElement(bindingPath);
这是。_oOnWorkInProgressDialog.open();
},
//触发片段内的“取消”按钮时的功能
onCancelApproval:function(){
这是。_oOnWorkInProgressDialog.close();
},
//触发碎片内的“批准”按钮时起作用
onWIPApproval:函数(){
这是。_oOnWorkInProgressDialog.close();
var message=this.getView().getModel(“i18n”).getResourceBundle().getText(“WIPSucture”);
MessageToast.show(message);
},

文本区域将在片段中弹出。我希望文本区域是空的。

我想你差不多有了它。把钥匙放好
if()
块后的
this.byId(“WIP”).setValue(“”)行。由于要将片段作为视图的依赖项添加,因此每次打开WIP片段并将其值设置为空时,
this.byId(“WIP”)
将找到id为“WIP”
的控件


你现在很可能无法实现它,因为A.它还不取决于你的观点,B.它只是在第一次尝试时被炒鱿鱼。

我想,你几乎已经成功了。把钥匙放好
if()
块后的
this.byId(“WIP”).setValue(“”)行。由于要将片段作为视图的依赖项添加,因此每次打开WIP片段并将其值设置为空时,
this.byId(“WIP”)
将找到id为“WIP”
的控件


您现在可能无法实现它,因为A.它还不依赖于您的视图,B.它只是在第一次循环时被触发。

如果您像这样实例化您的片段:

sap.ui.xmlfragment(“WIPworklist”、“com.sap.FinalAssestments.view.WorkInProgress”,这是一个);
您可以通过以下方式访问其控件:

Fragment.byId(“WIPWlowlist”、“WIP”).setValue(“”;//“sap/ui/core/Fragment”中需要的片段
资料来源:


更好的方法是使用视图模型。模型应具有属性
textAreaValue
或类似属性

然后将该属性绑定到文本区域(
)。如果使用代码更改值(例如,
this.getView().getModel(“视图”).setProperty(“/textarevalue”,”)
),它将自动在弹出窗口中显示新值


它的工作方式有两种:如果用户更改文本,它将在视图模型中自动更新,因此您可以使用
this.getView().getModel(“视图”).getProperty(“/textAreaValue”)

如果您像这样实例化片段:

sap.ui.xmlfragment(“WIPworklist”、“com.sap.FinalAssestments.view.WorkInProgress”,这是一个);
您可以通过以下方式访问其控件:

Fragment.byId(“WIPWlowlist”、“WIP”).setValue(“”;//“sap/ui/core/Fragment”中需要的片段
资料来源:


更好的方法是使用视图模型。模型应具有属性
textAreaValue
或类似属性

然后将该属性绑定到文本区域(
)。如果使用代码更改值(例如,
this.getView().getModel(“视图”).setProperty(“/textarevalue”,”)
),它将自动在弹出窗口中显示新值


它的工作方式有两种:如果用户更改文本,它将在视图模型中自动更新,因此您可以使用
this.getView().getModel(“视图”).getProperty(“/textAreaValue”)

我正在考虑您的解决方案,但按照您的解决方案,打开popover时文本将被清除。在她的请求中,她想在按下“OK”时清除文本:)对于对话框来说,这实际上不是一回事吗?实际上我更喜欢这样做,因为我总是发现在打开对话框时集中代码比在关闭对话框时更容易。编辑:无论哪种方式,
this.byId()
都应该在初始添加后工作,因为依赖项是执行的。只有通过
sap.ui.xmlfragment(this.getView().getId(),“com.sap.FinalAssestments.view.WorkInProgress”,this)加载片段时才工作。它与
addDependent
无关(这主要是与片段共享视图模型所必需的)。来源:我刚试过。啊-谢谢你的更正@Marc。我想这是一个我经常使用的“良好实践”指南(因为几乎总是需要模型传播),我把它的好处混为一谈。我打开的典型对话框如下所示:const oView=this.getView();如果(!this._CreditCardDialog){this._CreditCardDialog=sap.ui.xmlfragment(oView.getId(),“app.view.fragments.CreditCardDialog”,this);oView.addDependent(this._CreditCardDialog);}//清除任何必要的模型/字段。_CreditCardDialog.open()*很抱歉,格式化对我来说似乎是一种很好的做法,但根据您的版本,您可能需要切换
sap.ui.xmlfragment
已被弃用。我正在考虑您的解决方案,但按照您的解决方案,打开popover时文本将被清除。在她的请求中,她想在按下“OK”时清除文本:)对于对话框来说,这实际上不是一回事吗?实际上我更喜欢这样做,因为我总是发现在打开对话框时集中代码比在关闭对话框时更容易。编辑:不管怎样,