弹出对话框/片段

时间:2017-01-23 00:16:35

标签: sapui5

继我关于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在某处可能有一些舒适性。

1 个答案:

答案 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片段的

This API documentationthis walkthrough guide可能很有用