我有一个JSON模型,我从元数据集构建。
所以我创建了JSON数组并执行了以下操作:
var oModel = new JSONModel({
JSONDataSet: oJSONDataArray
});
this._oFragment.setModel(oModel);
在我的片段中,我有一张桌子:
<Table id="tableId" items="{ path:'/JSONDataSet' }">
<columns>
<Column>
<Text text="HeaderColumn1"/>
</Column>
<!-- ... -->
</columns>
<ColumnListItem>
<Text text="{Value1}"/>
<!-- ... -->
</ColumnListItem>
</Table>
现在我的片段一切正常。在我的列表中,我将从我的JSON模型中看到所有数据,但我仍然在我的控制台中收到这个奇怪的错误:
List Binding未绑定/ JSONDataSet的列表
我该如何解决这个问题?
列表绑定未绑定到列表...
当模块无法在服务$元数据文档中找到实体集名称或者由此产生的多重性不是error occurs only in ODataListBinding.js时,抛出上面的"*"
。 source
在您的情况下,框架假定JSONDataSet
是$元数据中定义的某些实体集名称,显然无法找到。为了防止框架在$ metadata中搜索,您需要告诉JSONDataSet
不是来自未命名的默认模型(ODataModel),而是来自另一个模型(JSONModel)。
尝试给它命名,并在绑定定义中指定名称,如下所示:
const oModel = new JSONModel({
JSONDataSet: /*some data*/
});
this._oFragment.setModel(oModel, "anotherModel");
<Table id="tableId" items="{anotherModel>/JSONDataSet}">
<!-- ... -->
<ColumnListItem>
<Text text="{anotherModel>Value1}"/>
<!-- ... -->
</ColumnListItem>
</Table>
在注册该模型并将其设置为片段之前,框架不会尝试解析anotherModel>/JSONDataSet
。由于框架现在知道它没有初始化ODataListBinding而是客户端ListBinding,因此错误将消失。
如果你看一下浏览器控制台,可能你已经错误地告诉你“没有提供模板或工厂功能”或类似的东西。
在以下代码中,缺少某些内容
<Table id="tableId" items="{ path:'/JSONDataSet' }">
<columns>
.....
<columns>
</Table>
如果您执行items="{ path:'/JSONDataSet' }"
,则表示您希望根据模型中的路径/JSONDataSet
动态创建列表中的项目。此路径应指向某种数组(通常是对象数组)。使用UI5术语,您尝试使用aggregation binding。
但是,您希望如何创建表中的项目?
这就是为什么你需要提供一个模板项,在表中声明一个示例项:
<Table id="tableId" items="{ path:'/JSONDataSet' }">
<columns>
.....
<columns>
<items>
<ColumnListItem>
<cells>
<ObjectIdentifier
title="{a}"
text="{b}"/>
<Text
text="{c}" />
</cells>
</ColumnListItem>
</items>
</Table>
查看UI5 documentation中的更多示例。
在上面的代码中,qazxsw poi,qazxsw poi和qazxsw poi是在数组中的每个对象中找到的属性。
最后,如果数组包含10个项目,则表格中将创建10行。如果要动态创建列,只需提供一个Column示例并使用a
。