【问题标题】:SAP UI5: How do you read the data in a nested odata object in Javascript?SAP UI5:如何在 Javascript 中读取嵌套 odata 对象中的数据?
【发布时间】:2021-04-02 12:51:39
【问题描述】:

我正在使用 $expand 参数调用 oData v2 服务,因此 url 如下所示:

https://host/odata/v2/myEntity?$expand=key4

我返回一个 oData json 对象,如下所示:

{
   "d": {
      "results": [
         {
            "key1": "val1",
            "key2": "val2",
            "key3": "val3",
            "key4": {
               "results": [
                  {
                     "key5": "val5",
                     "key6": "val6",
                     "key7": "val7"
                  }
               ]
            }
         }
      ]
   }
}

收到 oData 对象后,在我的 controller.js 中我创建一个 JSONModel 对象,像这样并将它分配给 viewModel:

var oJson = new sap.ui.model.json.JSONModel(oData);
this.getView().byId("tableId").setModel(oJson, "myModel");

接下来,在我的 View.xml 中,我有一个 ID 为“tableId”的表,它绑定了这个 myModel:

<Table id="tableId" items="{path: 'myModel>/results' }">

通过以上操作,我可以通过以下方式检索表中 key1、key2 和 key3 的值:

<Text text="{myModel>key1}" />

但我无法获取 key4 下的结果数组的值来访问 key5、key6 和 key7。请问我该如何实现?

【问题讨论】:

  • 您希望如何显示key4 值?如您所见,它是一个集合。 IE。你需要另一个聚合绑定。目前尚不清楚“获取值”的确切含义。
  • 顺便说一句:如果您正在处理 OData,则不需要 JSONModel。只需绑定现有的 ODataModel。不要不要使用.read
  • 您好 Boghyon,感谢您的 cmets,我已经编辑了我的问题以添加一些说明。您提到了聚合绑定。如何将 key4 下所有内容的值绑定到同一张表?

标签: javascript json odata sapui5


【解决方案1】:

您提到了聚合绑定。如何将key4 下所有内容的值绑定到同一张表?

取决于您希望如何显示 key4 值。由于.../key4/results 是一个集合,与/d/results 相同,例如,您可以创建另一个表/列表控件来显示key4 中的项目,该key4 是通过context binding 从第一个表中选择的。不能在同一个表中绑定key4

【讨论】:

  • 嗨 Boghyon,所以如果我们无法将 /key4/results 绑定到同一个表,可以使用控制器的 Javascripts onInit() 方法读取 oData,然后以编程方式将值设置为同一个表中的文本元素?这样所有数据都可以显示在一张表中?
  • @user1567874 我推荐声明性方法,而无需在控制器中手动调用.read。也许我误解了你在同一张桌子上绑定 key4 的意思。请使用线框或模型更新问题,清楚地显示您希望如何在一个表格中显示嵌套数据。
  • 因此,如果您想象一个包含列标题 key1、key2、key3、key5 的表。键 6,键 7。我可以通过表格项绑定让 key1-3 显示在表格中,但不能让 key5-7 显示在表格中,因为它们是嵌套的。
  • @user1567874 我建议先通过OpenUI5 - Get started。尤其是攻略。我了解您希望以某种方式在同一个表中显示 key5-7,这可以通过对索引号进行硬编码 来实现,但在现实世界的业务场景中,这是一种非常不寻常的不可扩展的方法。 key5-7 依赖于第一个表中的一行。除非您想在同一行中显示嵌套值(同样,非常不寻常),否则您必须使用另一个控件来显示这些嵌套值。
  • 问题是在表的同一行中显示父项和子项 ($expand=key4)。使用绑定方法,所有父值都显示在表中,但即使 odata 服务返回它们,它们对应的子值也不会显示,没有办法将嵌套的子节点值(在本例中为 key4 下的项)绑定到相同的值桌子。似乎此时可以实现的唯一方法是使用控制器检索 key4 下的值,并在运行时在 onInit() 方法中将它们绑定到表中的 Text 元素。如果你知道更好的方法 lmk
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多