当我在代码中创建模型时,我通常使用:
var oData = {
"name" : "",
"description" : "",
"phone" : ""
};
var oModel = new JSONModel(oData);
this.setModel(oModel, "data");
之后,我可以使用以下方式访问模型及其值:
var oModel = this.getView().getModel("data");
var description = oModel.getProperty("/description");
但是,这是使用内部 json 结构。当我使用 Hana Platform 中的 oData 目标或在 SAPUI5 项目上使用模型服务器时,如何获取 oModel 结构?
最佳答案
getProperty与任何其他模型一样,方法也存在于 ODataModel (v2) 上。因此用法有很大不同:
ODataModel 如何存储数据
这是因为 ODataModel 通过它的键存储数据,例如
{
"EntitySet('Key-1')": {},
"EntitySet('Key-2')": {},
"EntitySet('Key-3')": {},
"ExpandedEntitySet(EntityID='Key-3',ExpandedEntityIS='5')": {}
}
检查oMyODataDataModel.oData
以查看实际存储的数据(但请不要以这种方式使用或操作它,因为这是内部API)。
ODataModels getProperty
要检索单个实体,您必须这样说:
oDataModel.getProperty("/EntitySet('Key-1')");
尽管集合的绑定(bind)路径是 /EntitySet
请求
oDataModel.getProperty("/EntitySet");
不会返回任何内容。发生这种情况是因为 oData["EntitySet"] 的内部存储数据结构中没有实体,并且 getProperty
方法仍然只是在此内部结构中进行查找。
包括扩展实体
ODataModels getProperty
方法中一个有趣的事情是 bIncludeExpandEntries
参数。如果将其设置为 true,将返回访问的实体,包括所有可能扩展的 NavigationProperties。在上面的例子中
oDataModel.getProperty("/EntitySet('Key-3')");
还将返回“ExpandedEntitySet(EntityID='Key-3',ExpandedEntityIS='5')”。
ODataModels getObject
ODataModels getObject
方法具有更大的灵活性,因为它允许本地使用 OData 参数 $select
和 $expand
。仍然无法获取 EntitySet...注意:它不会加载任何丢失的数据,并且返回的数据可能不完整!
关于javascript - SAPUI5:如何以编程方式访问 ODataModel 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38749935/