继我关于Is it possible to use 2 models in one view的问题后,我现在对如何在XML片段中的表单上应用bindElement感到困惑。
片段(为简洁而减少):
<core:FragmentDefinition
namespaces here...>
<Dialog id="theDialogId" title="Edit Subdetail">
<content>
<f:SimpleForm id="EditFormId" editable="true" >
<f:content>
<Label id="lblName" text="Name" labelFor="inpName" />
<Input id="inpName" editable="true" value="{name}"/>
</f:content>
</f:SimpleForm>
</content>
</Dialog>
</core:FragmentDefinition>
挑战:假设我有一个包含路径/master/0/detail/6/subdetail/2
的模型 - 如何将simpleform绑定到此路径?在我看到的例子中,对话框中的元素通过
sap.ui.getCore().byId("inputId").setValue("some value)
并通过
访问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在某处可能有一些舒适性。
答案 0 :(得分:2)
你可以试试这样的......
onOpenDialog: function(oEvent) {
if(!this._oEditSubDetailDialog){
this._oEditSubDetailDialog = sap.ui.xmlfragment("fragmentId", "namespace.and.path.to.your.fragment", this);
this.getView().addDependent(this._oEditSubDetailDialog);
}
var sPathToBind = oEvent.getSource().getBindingContext().getPath();
sap.ui.core.Fragment.byId("fragmentId","EditFormId").bindElement(sPathToBind);
this._oEditSubDetailDialog.open();
}
...只需要确保事件的源代码控件具有绑定到您要编辑的上下文。
你也可以在对话框上直接使用bindElement,这样你就不需要在对话框中检索表单控件...
this._oEditSubDetailDialog.bindElement(sPathToBind)
关于XML片段的