List Binding未绑定/ JSONDataSet的列表

问题描述 投票:0回答:2

我有一个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的列表

我该如何解决这个问题?

sapui5
2个回答
1
投票

列表绑定未绑定到列表...

当模块无法在服务$元数据文档中找到实体集名称或者由此产生的多重性不是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,因此错误将消失。


0
投票

如果你看一下浏览器控制台,可能你已经错误地告诉你“没有提供模板或工厂功能”或类似的东西。

在以下代码中,缺少某些内容

<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

© www.soinside.com 2019 - 2024. All rights reserved.