首页 > 解决方案 > 如何正确地将表单元素绑定到 SAPUI5 中新创建的 oData 实体?

问题描述

我已经在我的 SAPUI5 应用程序中实现了一个 oData 服务。

按下按钮后,将触发 oData 模型,该模型createEntry()返回带有新创建实体的上下文。

根据 SAPUI5 文档 -文档(创建实体)setBindingContext(oContext) ,调用我的表单将我的新实体绑定到我的表单就足够了。

但无论我如何尝试,我似乎都无法让绑定工作。输入字段保持为空(尽管实体已设置属性)。

尝试使用 oData 模型进行这种绑定时,是否需要牢记特殊语法?

我的表格:

<f:SimpleForm id="form" editable="true" layout="ResponsiveGridLayout" title="Address" labelSpanXL="3" labelSpanL="3" labelSpanM="3"
    labelSpanS="12" adjustLabelSpan="false" emptySpanXL="4" emptySpanL="4" emptySpanM="4" emptySpanS="0" columnsXL="1" columnsL="1" columnsM="1"
    singleContainerFullSize="false">
    <f:content>
        <Label text="Recno"/>
        <sf:SmartField id="recno" value="{recno}"/>
    </f:content>
</f:SimpleForm>

我打开包含表单的对话框的方法:

openCreateDialog: function() {
  this.getOwnerComponent().getModel("oDataModel").refreshSecurityToken(function() {
    var oContext = this.getOwnerComponent().getModel("oDataModel").createEntry("/head", {
      properties: {
        recno: "100"
      }
    });
    this.byId("form").setBindingContext(oContext);
  }.bind(this), function(data) {
    console.log(data);
  }, true);
  this.byId("CreateHeadDialog").open();
},

编辑

我已经尝试过 {oDataModel>xxx} 但这不起作用。另一方面,在我将 oDataModel 设为无名模型后,它似乎工作正常。智能字段正确显示了正确的值,但我在 UI 中所做的更改并未应用于我的智能字段绑定到的属性。

当我提交我的 oDataModel 的待定更改时,我的实体的所有属性仍然未定义,尽管我用正确的值填充了智能字段。

标签: data-bindingodatasapui5

解决方案


您正在使用命名模型:您的模型名称是“ oDataModel”,这在您的代码中得到了证明:

.getModel("oDataModel")

在您的 XML 视图中使用绑定语法时,您需要在字段前面加上命名模型名称,如下所示:

<sf:SmartField id="recno" value="{oDataModel>(your-path-to-object)recno}"/>

如果它不在列表中,那么您需要如下引用该字段(或根据您的 json 层次结构中的 recno 位置导航:

 <sf:SmartField id="recno" value="{oDataModel>/recno}"/>

推荐阅读