【问题标题】:Binding of data in SAP UI5SAP UI5中数据的绑定
【发布时间】:2020-11-20 11:27:06
【问题描述】:

我有一个类似下图的设计(见附图)。 模型是这样的:-

 {
  "Approvers": [
    {
      "AFE_ID": "DV-101007600DD",
      "AFE_NAME": "San Andreas 1",
      "COST_CENTER": "101007600",
      "LOCATION": "Midland",
      "VERSION": "Revised",
      "DEADLINE": "15th May 2020",
      "ACTION": "Approve/Reject",
      "STATUS": "Completed",
      "WBS_ID": "WBS Element 1",
      "CREATED_BY": "James Edwin",
      "CREATED_ON": "22-04-2020",
      "OWNER": "Dri Mathews",
      "LEVEL": {
        "LEVEL1": [
          {
            "APPROVER_NAME": "Sentra",
            "DEPARTMENT": "Drilling",
            "APPROVED_ON": "23-07-2020",
            "LEVEL_ID": 1
          },
          {
            "APPROVER_NAME": "axis",
            "DEPARTMENT": "Drilling",
            "APPROVED_ON": "23-07-2020",
            "LEVEL_ID": 1
          }
        ],
        "LEVEL2": [
          {
            "APPROVER_NAME": "bill",
            "DEPARTMENT": "Drilling",
            "APPROVED_ON": "23-07-2020"
          },
          {
            "APPROVER_NAME": "oilp",
            "DEPARTMENT": "Drilling",
            "APPROVED_ON": "23-07-2020"
          }
        ]
      }
    }
  ]
}

我试图以这样一种方式进行绑定,即应根据级别创建两个框,并且每个框都应具有根据 json 的数据,即每个框中的 LEVEL 1 和 LEVEL2 数据。在下面的代码中,我为 Level 绑定了 Grid 控制器,它创建了两个框,但是当我尝试用表格内容填充每个框时,它会得到相同的内容。请建议我如何更正此绑定?

<f:GridContainer id="demoGrid" items="{approversCollection>/Approvers/0/LEVEL}">
                                <f:layout>
                                    <f:GridContainerSettings rowSize="5rem" columnSize="5rem" gap="1rem"/>
                                </f:layout>
                                <f:layoutS>
                                    <f:GridContainerSettings rowSize="4rem" columnSize="4rem" gap="0.5rem"/>
                                </f:layoutS>
                                <f:items>
                                    <FlexBox class="columns">
                                        <layoutData>
                                            <f:GridContainerItemLayoutData columns="12"/>
                                        </layoutData>
                                        <VBox backgroundDesign="Solid" class="demo">
                                            <VBox>
                                                <Label text="Level" design="Bold" class="sapUiSmallMarginTop sapUiMediumMarginBegin"/>
                                            </VBox>
                                            <VBox>
                                                <Table id="idApproversTable" class="demo" inset="false" growing="true"
                                                    items="{ path: 'approversCollection>/Approvers/0/LEVEL/2' }">
                                                    <columns>
                                                        <Column demandPopin="true">
                                                            <Label text="APPROVER NAME" design="Bold"/>
                                                        </Column>
                                                        <Column minScreenWidth="Phone" demandPopin="true" hAlign="Center">
                                                            <Label text="DEPARTMENT" design="Bold"/>
                                                        </Column>
                                                        <Column minScreenWidth="Phone" demandPopin="true" hAlign="Center">
                                                            <Label text="APPROVED ON" design="Bold"/>
                                                        </Column>
                                                    </columns>
                                                    <items>
                                                        <ColumnListItem>
                                                            <cells>
                                                                <Text text="{approversCollection>APPROVER_NAME}"/>
                                                                <Text text="{approversCollection>DEPARTMENT}"/>
                                                                <Text text="{approversCollection>APPROVED_ON}"/>
                                                            </cells>
                                                        </ColumnListItem>
                                                    </items>
                                                </Table>
                                                <layoutData>
                                                    <FlexItemData growFactor="1" baseSize="0" backgroundDesign="Solid" styleClass="sapUiTinyMargin"/>
                                                </layoutData>
                                            </VBox>
                                        </VBox>
                                    </FlexBox>
                                </f:items>
                            </f:GridContainer>

【问题讨论】:

  • 是否可以更改数据?你能把 LEVEL 改成一个数组吗?
  • @Marc - 是的,你改变了..
  • 好的,那么请照着做。
  • 但是如何绑定是我的问题,
  • 如果items="{approversCollection&gt;/Approvers/0/LEVEL} 返回一个数组,那么这个路径是正确的。请显示您更新的 JSON 模型结构。

标签: javascript xml data-binding sapui5


【解决方案1】:

您需要使用正确的绝对/相对路径并相应地修改您的模型:

...
"LEVEL":  [
    { "DATA" : [
        {
            "APPROVER_NAME": "Sentra",
            "DEPARTMENT": "Drilling",
            "APPROVED_ON": "23-07-2020",
            "LEVEL_ID": 1
        },
        {
            "APPROVER_NAME": "axis",
            "DEPARTMENT": "Drilling",
            "APPROVED_ON": "23-07-2020",
            "LEVEL_ID": 1
        }
    ]},
    { "DATA" : [
        {
            "APPROVER_NAME": "bill",
            "DEPARTMENT": "Drilling",
            "APPROVED_ON": "23-07-2020"
        },
        {
            "APPROVER_NAME": "oilp",
            "DEPARTMENT": "Drilling",
            "APPROVED_ON": "23-07-2020"
        }
    ]}
]
...

<f:GridContainer id="demoGrid" items="{approversCollection>/Approvers/0/LEVEL}">
...
    <Table id="idApproversTable" 
        class="demo"
        inset="false" 
        growing="true"
        items="{ path: 'approversCollection>DATA' }">
...
        <Text text="{approversCollection>APPROVER_NAME}"/>
        <Text text="{approversCollection>DEPARTMENT}"/>
        <Text text="{approversCollection>APPROVED_ON}"/>
    

【讨论】:

  • 如果我这样编写 json 模型,那么它不会使用“DATA”数组两次,它会被最近的条目替换。我需要将其中一个命名为 DATA,第二个命名为“ DATA2”之类的,否则将无法正常工作。请建议我如何纠正这个问题。 @A.vH
  • 您是否检查了正确的数据结构? “级别”是一个对象数组。每个对象可以包含一个属性“数据”,它是一个对象数组其中您的数据结构是:“级别”是一个包含属性“级别1”和“级别2”的对象,这些属性是对象数组
  • 好的同意我的数据结构不正确;您可以随心所欲地更改数据,但我希望您理解我为什么要将 LEVEL1 作为对象数组,因为在一个级别的后端可以有多个审批者。但是,您提供的数据结构也不正确。您提供的数据,请将其放入 json 格式化程序并查看,在数据数组中您将只能看到最后一个条目。所以是的,我的数据格式不正确,我不确定应该如何更正数据。
  • 嘿,是的,谢谢你成功了:),感谢你为此付出的所有努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多