bindProperty到单个OData实体
在UI5中,如果模型是OData,是否可以将单个实体的单个属性绑定到控件属性?如果将聚合绑定到实体集,但似乎无法使用实体的属性,则绑定可以正常工作。假设我有一个名为bindProperty到单个OData实体,odata,sapui5,Odata,Sapui5,在UI5中,如果模型是OData,是否可以将单个实体的单个属性绑定到控件属性?如果将聚合绑定到实体集,但似乎无法使用实体的属性,则绑定可以正常工作。假设我有一个名为TestSet的实体集。每个“测试”都有属性键和名称。我想将表的标题绑定到该集合中某个实体的名称 以下代码有什么问题 createContent: function(oController) { jQuery.sap.require("sap.ui.table.Table"); var oTable = new sap
TestSet
的实体集。每个“测试”都有属性键
和名称
。我想将表的标题绑定到该集合中某个实体的名称
以下代码有什么问题
createContent: function(oController) {
jQuery.sap.require("sap.ui.table.Table");
var oTable = new sap.ui.table.Table({title: "{/TestSet('01')/Name}"});
oTable.setModel(new sap.ui.model.odata.ODataModel("/path/to/root/of/odata/"));
oTable.bindProperty("title", "/TestSet('01')/Name");
return oTable;
},
单独测试时,OData工作正常/TestSet
返回一组测试实体,而/TestSet('01')
返回其中一个实体
我已经测试了绑定到/Name
,/TestSet('01')/Name
,等等。似乎什么都不起作用。您可以通过将控件绑定到特定元素(层次结构是聚合->元素->属性)来实现这样的属性绑定。以你为例,你可以这样做:
var oTable = new sap.ui.table.Table({
title : "{Name}"
});
当你这样做的时候:
oTable.bindElement("/Products(0)");
HTTP调用由OData模型机制进行,该值显示在表的title属性中
,使用北风。根据
对后端的请求由ODataModel提供的列表绑定、元素绑定和CRUD函数触发属性绑定不会触发请求
因此,与其试图用绝对路径直接绑定目标控件属性上的数据,不如利用(aka.)父控件或目标控件本身,然后用相对路径绑定目标控件属性上的数据,甚至子控件上的数据(
而不是路径中的/
)
我们可以在JS(例如,如果需要实体键)或XML视图中绑定单个实体
在JS中
不要硬编码实体类型的键谓词,请确保在加载$metadata
后执行此操作
const-oTable=新表({//“sap/ui/Table/Table”中需要)
标题:“{Name}”,//没有绝对绑定路径,只有相对绑定路径(没有“/”)
});
常量myODataModel=/*…*/;
等待myODataModel.metadataLoaded();
constbindingpath=myODataModel.createKey(“/TestSet)”,{//See
键1:“…”,
键2:1234,
});//返回例如“/TestSet(key1='test1',key2='1234l')”
bindElement({//触发请求并解析相对的{Name}属性。
路径:bindingPath,
参数:{
展开:“…”,
选择“…”,
//…有关更多选项,请参阅
},
事件:{//也可以分配事件处理程序
请求的数据:e=>{/*…*/},
收到的数据:e=>{/*…*/},
更改:e=>{/*…*/},
},
});
注意:和是相同的API,只是名称不同。另请参阅
在XML视图中
在XML视图中,单个对象/实体可以通过任何控件中的binding
进行绑定。但是动态创建键(如上所示的createKey
)是不可能的。因此,仅将binding
与
名称结合使用,其中不需要定义键
binding=“{/TestSet()}”
也是可能的,但同样地,密钥需要硬编码