data-binding - 如何正确地将表单元素绑定到 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 的待定更改时,我的实体的所有属性仍然未定义,尽管我用正确的值填充了智能字段。
解决方案
您正在使用命名模型:您的模型名称是“ oDataModel
”,这在您的代码中得到了证明:
.getModel("oDataModel")
在您的 XML 视图中使用绑定语法时,您需要在字段前面加上命名模型名称,如下所示:
<sf:SmartField id="recno" value="{oDataModel>(your-path-to-object)recno}"/>
如果它不在列表中,那么您需要如下引用该字段(或根据您的 json 层次结构中的 recno 位置导航:
<sf:SmartField id="recno" value="{oDataModel>/recno}"/>