Sapui5 弹出对话框/片段中表单上的BindElement()

Sapui5 弹出对话框/片段中表单上的BindElement(),sapui5,Sapui5,在我的问题之后,我现在对如何在XML片段中的表单上应用bindElement感到困惑 片段(为简洁起见,请删节): 并通过 var uid = sap.ui.getCore().byId("inputId").getValue() 但是,我希望使用路径绑定 我遇到的问题是如何获取对simpleform的引用,以便使用bindElement() 如果这是一个观点,我会使用 var theForm = this.getView().byId("EditFormId"); var oBinding

在我的问题之后,我现在对如何在XML片段中的表单上应用bindElement感到困惑

片段(为简洁起见,请删节):

并通过

var uid = sap.ui.getCore().byId("inputId").getValue()
但是,我希望使用路径绑定

我遇到的问题是如何获取对simpleform的引用,以便使用bindElement()

如果这是一个观点,我会使用

var theForm = this.getView().byId("EditFormId");

var oBindingContext = event.oSource.getBindingContext();
theForm.bindElement(oBindingContext.getPath())
但是,片段没有与视图紧密耦合,因此这将不起作用。相反,我认为我必须使用

var dlgForm = sap.ui.core.Fragment.byId("theFragmentId", "EditFormId")

var oBindingContext = event.oSource.getBindingContext();
dlgForm.bindElement(oBindingContext.getPath())
这可能是正确的,但我不知道如何在XML视图声明中应用“theFragmentId”。有人能帮我扫除雾吗


编辑:根据公认的答案,我缺少的是所需的片段ID可以作为sap.ui.xmlfragment()函数的第一个(可选)参数提供。绑定到基于片段的控件中的关键是获取该控件的句柄,但是sap.ui.core.fragment.byId(fragId,ctrlId)函数需要片段id。我的问题是我一直关注XML片段声明以及如何在那里应用id。这在SAPUI5中感觉不一致,但我想能够将ID应用于片段可能有一些好处

你可以试试这样的

onOpenDialog:函数(oEvent){
如果(!this.\u oEditSubDetailDialog){
this.\u oEditSubDetailDialog=sap.ui.xmlfragment(“fragmentId”,“namespace.and.path.to.your.fragment”,this);
this.getView().addDependent(this.\u oEditSubDetailDialog);
}
var sPathToBind=oEvent.getSource().getBindingContext().getPath();
byId(“fragmentId”、“EditFormId”).bindElement(sPathToBind);
这是._oEditSubDetailDialog.open();
}
…只需确保事件的源代码管理已绑定到要编辑的上下文即可

您也可以直接在对话框上绑定元素,这样您就不需要在对话框中检索表单控件

this._oEditSubDetailDialog.bindElement(sPathToBind)

关于XML片段可能很有用

您可以尝试以下内容

onOpenDialog:函数(oEvent){
如果(!this.\u oEditSubDetailDialog){
this.\u oEditSubDetailDialog=sap.ui.xmlfragment(“fragmentId”,“namespace.and.path.to.your.fragment”,this);
this.getView().addDependent(this.\u oEditSubDetailDialog);
}
var sPathToBind=oEvent.getSource().getBindingContext().getPath();
byId(“fragmentId”、“EditFormId”).bindElement(sPathToBind);
这是._oEditSubDetailDialog.open();
}
…只需确保事件的源代码管理已绑定到要编辑的上下文即可

您也可以直接在对话框上绑定元素,这样您就不需要在对话框中检索表单控件

this._oEditSubDetailDialog.bindElement(sPathToBind)

关于XML片段可能很有用

谢谢你。您的示例代码和指向API文档的链接说明了一点,即可以将所需的片段ID作为sap.ui.xmlfragment()函数的第一个(可选)参数,这是我在所有示例中都没有看到的,包括演练的第16节,这是一个简单的确认/重置对话示例.sap.ui.core.Fragment.byId(“fragmentId”、“EditFormId”).bindElement(sPathToBind);为什么会这样?我有两个模型Omodel 1用于视图中的表绑定。oModel2用于片段绑定。this.getView().setModel(oModel1,“表”);this.getView().setModel(oModel2,“list”);这可能吗?通过
this.\u oEditSubDetailDialog.setModel(this.getOwnerComponent().getModel(“myModel”)
this.\u oEditSubDetailDialog.bindElement(sPathToBind)
谢谢。您的示例代码和指向API文档的链接说明了一点,即可以将所需的片段ID作为sap.ui.xmlfragment()函数的第一个(可选)参数,这是我在所有示例中都没有看到的,包括演练的第16节,这是一个简单的确认/重置对话示例.sap.ui.core.Fragment.byId(“fragmentId”、“EditFormId”).bindElement(sPathToBind);为什么会这样?我有两个模型Omodel 1用于视图中的表绑定。oModel2用于片段绑定。this.getView().setModel(oModel1,“表”);this.getView().setModel(oModel2,“list”);这可能吗?通过
this.\u oEditSubDetailDialog.setModel(this.getOwnerComponent().getModel(“myModel”)
this.\u oEditSubDetailDialog.bindElement(sPathToBind)
this._oEditSubDetailDialog.bindElement(sPathToBind)