【问题标题】:How to correctly bind a form element to newly created oData Entity in SAPUI5?如何将表单元素正确绑定到 SAPUI5 中新创建的 oData 实体?
【发布时间】:2019-09-12 10:20:43
【问题描述】:

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

按下按钮时,oData 模型createEntry() 被触发,它返回一个带有新创建实体的上下文。

根据 SAPUI5 文档 - Documentation (Creating Entities) 在我的表单上调用 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-binding odata sapui5


【解决方案1】:

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

.getModel("oDataModel")

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

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

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

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

【讨论】:

  • 我认为它在绑定上下文中不需要/{oDataModel&gt;recno} 不应该这样做吗?
  • 感谢您的回复。我已经尝试过 {oDataModel>xxx} 但这不起作用。另一方面,在我将 oDataModel 设为无名模型后,它似乎工作正常。智能字段正确显示正确的值,但我在 UI 中所做的更改并未应用于我的智能字段绑定到的属性。
  • 如果更改为无名模型解决了您的问题,那么问题在于您在绑定语句中阐明数据路径的方式。您可以(并且在我看来应该)恢复到命名模型并了解您的路径问题 - 这对您将来很有价值。通常,在您的场景中,斜杠“/”和模型名称后没有斜杠之间的区别(鉴于从命名作品到未命名作品的变化)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多