SAPUI5 ComboBox getBinding() 返回未定义

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

我在表外有一个 ComboBox1,在表内有一个 ComboBox2,ComboBox1(表外)我可以访问组合框 .getBinding("items"),但 ComboBox2(表内)我不能。

我需要根据另一列的绑定动态过滤ComboBox2(在Table内),当onValueChange方法更改时触发。

我在两个组合中使用相同的数据绑定。

你能帮我吗?

XML

<ComboBox
    id="cmbBox1"
    selectedKey="{naoConformidade}"
    items="{/ncCollection}"
    showSecondaryValues="true"
    selectionChange="onNcSelected">
    <core:ListItem key="{code}" text="{name}" additionalText="{key}" />
  </ComboBox>
  <IconTabBar
    expanded="{device>/isNoPhone}"
    class="sapUiSmallMarginBottom sapUiResponsiveContentPadding">
    <items>
      <IconTabFilter
        key="info"
        text="Conteúdo">
        <Table id="idProductsTable"
          inset="false"
          items="{/detail/lines}">
          <columns>
            <Column>
              <Text text="Especificação" />
            </Column>
            <Column>
              <Text text="Valor Encontrado" />
            </Column>
            <Column>
              <Text text="NC" />
            </Column>
          </columns>
          <items>
            <ColumnListItem vAlign="Middle">
              <cells>
                <Text text="{nomeEspecificacao}" />
                <Input value="{vlrEncontrado}" change="onValueChange" />
                <ComboBox
                  id="cmbBox2"
                  selectedKey="{naoConformidade}"
                  items="{/ncCollection}"
                  showSecondaryValues="true"
                  selectionChange="onNcSelected">
                  <core:ListItem key="{code}" text="{name}" additionalText="{key}" />
                </ComboBox>
              </cells>
            </ColumnListItem>
          </items>
        </Table>

控制器

onValueChange: function (oEvent) {
       this.byId("cmbBox1").getBinding('items') //return bind OK
       this.byId("cmbBox2").getBinding('items') //return undefined
    }

我一定是做错了什么愚蠢的事情。

sapui5
1个回答
0
投票

我测试了您的代码,它对我有用,不同之处在于我创建了一个本地模型来将项目绑定到组合框。我认为你应该审视一下你的人际关系。 这是我用来测试的简化方法:

        <ComboBox
            id="cmbBox1"
            selectedKey="{naoConformidade}"
            items="{/ncCollection}"
            showSecondaryValues="true"
            selectionChange="onNcSelected">
            <core:ListItem
                text="{code}"
                additionalText="{key}" />
        </ComboBox>
        <Table id="idProductsTable">
            <columns>
                <Column>
                    <Text text="Especificação" />
                </Column>
                <Column>
                    <Text text="Valor Encontrado" />
                </Column>
                <Column>
                    <Text text="NC" />
                </Column>
            </columns>
            <items>
                <ColumnListItem vAlign="Middle">
                    <cells>
                        <Text text="nomeEspecificacao" />
                        <Input
                            value="vlrEncontrado"
                            change="onValueChange" />
                        <ComboBox
                            id="cmbBox2"
                            selectedKey="{naoConformidade}"
                            items="{/ncCollection}"
                            showSecondaryValues="true"
                            selectionChange="onNcSelected">
                            <core:ListItem
                                text="{code}"
                                additionalText="{key}" />
                        </ComboBox>
                    </cells>
                </ColumnListItem>
            </items>
        </Table>

控制器:

        onInit: function () {
            const oModel = new JSONModel({
                ncCollection: [
                    {
                        code: 'asd123',
                        key: 'key123'
                    },
                    {
                        code: 'dfhgs345345',
                        key: 'key321'
                    },
                    {
                        code: 'gjfg46457',
                        key: 'key231'
                    }
                ]
            });

            this.getView().setModel(oModel);
        },
        onValueChange: function () {
            console.log(`List items of cmbBox1: `, this.byId("cmbBox1").getBinding('items'));
            console.log(`List items of cmbBox2: `, this.byId("cmbBox2").getBinding('items'));
        }

希望对你有帮助。

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