【问题标题】:How to use JSON Model Property as path for OData v4 List Binding in UI5如何在 UI5 中使用 JSON 模型属性作为 OData v4 列表绑定的路径
【发布时间】:2019-09-05 13:58:28
【问题描述】:

我尝试在 SAP UI5 中显示来自 OData V4 服务的对象列表。我想使用 JSON 模型中的属性来设置列表项的绑定路径。

我以为我可以在表的项目聚合中设置路径:

<Table
  items="{
    path: '{appView>/dataPath}',
    parameters: {
      $count: true,
      $$updateGroupId: 'peopleGroup'
    }
  }">...</Table>

当然还有定义和设置模型:

var oViewModel = new JSONModel({
  dataPath: "/People"
});

this.getView().setModel(oViewModel, "appView");

由于某种原因,数据未加载。甚至没有绑定到表格的项目:

oTable.getBinding("items");  // undefined

JSON 模型在控制器的 init 方法中定义。

有人知道为什么这不起作用吗?

【问题讨论】:

  • 建议直接在表上绑定 oData。无论如何,您正在创建一个空的新 JSONModel
  • 之所以要这样做,是因为这个视图用于两个不同的实体。所以根据来源我想将不同的路径绑定到这个表。
  • 您能否在检索 oData 调用或获取任何数据的位置添加信息?
  • OData 模型被创建为 manifest.json 中的默认模型。因此,绑定“/People”从 OData 服务获取数据。

标签: javascript sapui5


【解决方案1】:

据我了解,您希望动态绑定路径。在这种情况下,您可以在没有任何路径的情况下在 xml 中编写模板,然后在控制器中编写绑定路径 XML 视图:

<Table id="tblData" items="{}"> <items> **template code ** </items> </Table>

控制器:

var oTable = this.getView().byId("tblData"),
    sPath = this.getModel("appView").getProperty("/dataPath"),
    oBinding = oTable.bindItems({path: sPath});

过滤器:

oBinding.filter(aFilters);

【讨论】:

    【解决方案2】:
    items: "{
      path: '{appView>/dataPath}',
    

    有人知道为什么这不起作用吗?

    绑定定义仅适用于 ManagedObject 的属性和聚合。由于 path 只是一个普通对象属性,因此尝试绑定其中的任何内容都会被忽略。

    【讨论】:

      【解决方案3】:

      既然你想将Table绑定到{appView&gt;/dataPath}绑定的result,我想你需要使用Expression Binding来解决这个问题。

      items="{
          path: '{= ${appView>/dataPath}}',
          parameters: {
            $count: true,
            $$updateGroupId: 'peopleGroup'
          }
      

      【讨论】:

      • 这也行不通。我开始认为这里不支持绑定
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 2013-05-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多