接着我提出的关于Is it possible to use 2 models in one view的问题,我现在对如何在bindElement片段中的表单上应用XML感到困惑。
片段(为简洁起见进行了删减):
<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
的模型-如何将简单形式绑定到此路径?在我所见过的示例中,对话框中的元素由
sap.ui.getCore().byId("inputId").setValue("some value)
并通过以下方式访问
var uid = sap.ui.getCore().byId("inputId").getValue()
但是,我想对路径使用绑定。
我遇到的问题是如何获得对简单表单的引用,以便可以使用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 view声明中应用"theFragmentId“。有人能帮我驱散迷雾吗?
编辑:根据公认的答案,我缺少的是所需的片段ID可以作为sap.ui.xmlfragment()函数的第一个(可选)参数给出。绑定到基于片段的控件的关键是获得它的句柄,但是sap.ui.core.Fragment.byId(fragId,ctrlId)函数需要一个片段id。我的问题是,我专注于XML片段声明以及如何在其中应用id。这在SAPUI5中感觉不一致,但我猜能够将ID应用到片段中可能会有一些便利。
发布于 2017-01-23 01:30:08
你可以试试像这样的东西。
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();
}
...just需要确保事件的源代码控件绑定了您要编辑的上下文。
你也可以直接在对话框上使用bindElement,这样你就不需要在对话框中检索表单控件了……
this._oEditSubDetailDialog.bindElement(sPathToBind)
关于XML片段的This API documentation和this walkthrough guide可能会很有用。
https://stackoverflow.com/questions/41797603
复制