bindProperty到单个OData实体

bindProperty到单个OData实体,odata,sapui5,Odata,Sapui5,在UI5中,如果模型是OData,是否可以将单个实体的单个属性绑定到控件属性?如果将聚合绑定到实体集,但似乎无法使用实体的属性,则绑定可以正常工作。假设我有一个名为TestSet的实体集。每个“测试”都有属性键和名称。我想将表的标题绑定到该集合中某个实体的名称 以下代码有什么问题 createContent: function(oController) { jQuery.sap.require("sap.ui.table.Table"); var oTable = new sap

在UI5中,如果模型是OData,是否可以将单个实体的单个属性绑定到控件属性?如果将聚合绑定到实体集,但似乎无法使用实体的属性,则绑定可以正常工作。假设我有一个名为
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()}”
也是可能的,但同样地,密钥需要硬编码