【问题标题】:BindElement() on form in popup dialog / fragment弹出对话框/片段中的表单上的 BindElement()
【发布时间】:2017-01-23 00:16:34
【问题描述】:

继我关于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 应用于片段可能在某处有一些便利。

【问题讨论】:

    标签: sapui5


    【解决方案1】:

    你可以试试这样的……

    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();
    }
    

    ...只需要确保事件的源代码管理具有您要编辑的上下文绑定到它。

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

    this._oEditSubDetailDialog.bindElement(sPathToBind)
    

    This API documentationthis walkthrough guide 关于 XML 片段可能有用

    【讨论】:

    • 谢谢伊恩。您的示例代码和指向 API 文档的链接阐明了可以将所需片段 ID 作为 sap.ui.xmlfragment() 函数的第一个(可选)参数给出的点——这是我在所有示例中都没有看到的见,包括演练的第 16 节,这是一个简单的确认/重置对话示例。
    • sap.ui.core.Fragment.byId("fragmentId","EditFormId").bindElement(sPathToBind);为什么这个 sPathToBind?我有两个模型 oModel1 用于视图中的表绑定。 oModel2 用于片段绑定。 this.getView().setModel(oModel1, "table"); this.getView().setModel(oModel2, "list");这可能吗?
    • 通过this._oEditSubDetailDialog.setModel(this.getOwnerComponent().getModel("myModel")) & this._oEditSubDetailDialog.bindElement(sPathToBind)解决了我的问题
    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    相关资源
    最近更新 更多