列表绑定未绑定到/ JSONDataSet的列表

时间:2018-12-20 09:53:16

标签: sapui5

我有一个基于元数据集构建的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模型中的所有数据,但在控制台中仍然收到此奇怪的错误:

  

列表绑定未绑定到/ JSONDataSet的列表

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

  

列表绑定不与...的列表绑定。

上面的error occurs only in ODataListBinding.js,当模块未能在服务$ metadata文档中找到实体集名称时抛出,如果结果的多重性不是"*",则抛出该异常。 source


在您的情况下,框架假定JSONDataSet是$ metadata中定义的某个实体集名称,显然找不到。为了防止框架在$ 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。

答案 1 :(得分: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中查看更多示例。

在上面的代码中,abc是在数组内部的每个对象中发现的属性。

最后,如果数组包含10个项目,则将在表中创建10行。如果要动态创建列,只需提供一个列示例,然后使用columns="{ path:'/JSONDataSet'}