过滤ComboBox的内容

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

我试图在运行时根据另一个ComoboBox 的选定值来过滤ComboBox 的内容,但不知何故我的过滤器代码不起作用。

用文字来说:

  1. 我通过ID获得控制权。
  2. 我得到了聚合“items”的绑定
  3. 创建过滤器
  4. 将过滤器推至绑定处
  5. 呼叫过滤器。

但是没有任何反应,这里是示例代码:

var oComboBoxControl = this.getView().byId(someID);

var oBindingComboBox = oComboBoxControl.getBinding("items");

var aFiltersComboBox = [];
var oFilterPComboBox = new sap.ui.model.Filter("SomeAttribute", sap.ui.model.FilterOperator.EQ, 'SOMESTRING');
aFiltersComboBox.push(oFilterComboBox);
oBindingComboBox.filter(aFiltersComboBox);

我在桌子上使用了相同的代码,它的效果就像一个魅力。我不明白这个问题。这是 ComboBox 的普遍问题吗

问题在于代码可以工作的视图中的独立组合框,但该组合框嵌入到列表结构中,并且该组合框多次出现。

我认为我在获取组合框的相关 ID 时做错了什么。

var sSOMEID = oEvent.oSource.getParent().getParent().getParent().getItems()[1].getItems()[0].getCustomControl().getId();

这是动态生成控件 ID 来获取它们的正确方法吗?不确定。

<mvc:View
    controllerName="sap.m.sample.CustomListItem.List"
    xmlns:l="sap.ui.layout"
    xmlns:core="sap.ui.core"
    xmlns:mvc="sap.ui.core.mvc"
    xmlns="sap.m">
    <List headerText="Custom Content" mode="Delete" items="{path: '/SomeSet'}" >
        <CustomListItem>
            <HBox>
                <core:Icon size="2rem" src="sap-icon://attachment-photo" class="sapUiSmallMarginBegin sapUiSmallMarginTopBottom" />
                <VBox  class="sapUiSmallMarginBegin sapUiSmallMarginTopBottom" >
                    <ComboBox id="idSomeComboBox"
                     items="{
                     path: '/SomeSet', templateShareable: true,
                     sorter: { path: 'Description' }
                     }"
                     >
                     <core:Item key="{ID}"
                     text="{Description}"/>
                     </ComboBox>
                </VBox>
            </HBox>
        </CustomListItem>
    </List>
</mvc:View>
javascript sapui5
2个回答
0
投票

您可以使用loaditems方法:

<ComboBox id="idSomeComboBox" loadItems="handleLoadItems" ...

handleLoadItems: function (oControlEvent) {
        var oModelInt = sap.ui.getCore().getModel("data");
        var oDataInt = oModelInt.getData();
        var sValue = oDataInt.value;
        var oFilter1 = new sap.ui.model.Filter('text', sap.ui.model.FilterOperator.EQ, sValue);
        var filters = [oFilter1];
        oControlEvent.getSource().getBinding("items").filter(filters, sap.ui.model.FilterType.Application);
    }

0
投票

您似乎没有将过滤器设置到正确的组合框:

您在

ComboBox
中检索
var oComboBoxControl
,但从
oProductGroupControl
获取绑定,并且以后不再使用
oComboBoxControl

您的代码现在看起来不错...我在事件处理程序中尝试了它(文本输入更改过滤了

ComboBox
)并且它按预期工作。

doFilter : function(oEvent) {
    var filter = oEvent.getParameter("newValue");

    var oComboBoxControl = this.getView().byId("cb");

    var oBindingComboBox = oComboBoxControl.getBinding("items");

    var aFiltersComboBox = [];
    var oFilterComboBox = new sap.ui.model.Filter("text", "Contains", filter);
    aFiltersComboBox.push(oFilterComboBox);
    oBindingComboBox.filter(aFiltersComboBox);
}

一些想法:

  • 你能检查一下代码是否实际执行了吗?
  • 您正在使用一个检查相等性的过滤器;因此,指定的过滤器应该与内容完全匹配。您可以尝试用
    Contains
    代替
    EQ
    吗?
© www.soinside.com 2019 - 2024. All rights reserved.