覆盖组合框以将项目过滤到组合框中,如何使用this.filter项目

时间:2019-12-12 13:06:42

标签: javascript filter combobox sapui5

我正在使用UI5框架v1.38.39,我想做一个自定义组合框(不是sap.m.Combobox,而是custom.comboboxsearch(包括sap.m.comboboxsap.m.comboboxbase)可以从键和文本中搜索内容(通过包含搜索),因此我在自定义控件中有以下内容:

sap.ui.define([
        "sap/m/ComboBox",
        "sap/m/ComboBoxBase"
    ],
    function (oComboBox, oComboBoxBase) {
        "use strict";
        /*some stuff*/
        sValue = oEvent.target.value;
        aVisibleItems1 = this.filterItems({
          property: "text",
          value: sValue 
        });
        aVisibleItems2 = this.filterItems({
          property: "key",
          value: sValue 
        });
        /*some stuff*/

我的问题是我没有2个过滤器,第二个只是替换了第一个,然后我只从键中获得了属性文本中的项目,我想同时尝试两个: >

sValue = oEvent.target.value;
aVisibleItems1 = this.filterItems({
  property: ["text","key"],
  value: sValue 
});

给我错误:

  

未捕获的TypeError:p.charAt不是函数       在f.d.filterItems(ComboBox.js:6)

ComBox.js是UI5的核心文件,然后我尝试了:

sValue = oEvent.target.value;
aVisibleItems1 = this.filterItems({
  property: "key" || "text",
  value: sValue 
});

哪个也不起作用,因为仅考虑key而没有考虑text,有人可以解决吗?

PS:当我使用动态绑定时,我想我不能包含通过其他控制器绑定的项目。

视图是:

<!--some stuff-->
<Label text="{i18n>MyText}" />
<Custom:ComboBoxSearch id="mycustombox" selectionChange='onChange'>
    <core:Item key="{key}" text="{text}" />
</Custom:ComboBoxSearch>
<!--some stuff-->

项目是从控制器添加的

2 个答案:

答案 0 :(得分:0)

嗯,我不知道我是否正确理解您的问题,但我想这就是您想要的。

    <ComboBox
                    id="combobox1"
                    showSecondaryValues= "true"
                    items="{
                        path: '/yourdata',
                        sorter: { path: 'text' }
                    }">
                    <core:ListItem key="{key}" text="{text}" additionalText = "{key}"/>
                </ComboBox>

,在您的控制器中,它应如下所示:

        this.getView().byId("combobox1").setFilterFunction(function(sTerm, oItem) {
            return oItem.getText().match(new RegExp(sTerm, "i")) || oItem.getKey().match(new RegExp(sTerm, "i"));
        });

因此您可以搜索无关紧要的键或文本

答案 1 :(得分:0)

sap.ui.ComboBox具有一个名为filterSecondaryValues的属性,该属性可同时过滤文本和AdditionalText。 如果您将ListItem聚合的'additionalText'设置为键的值(如果您不想显示它们,请让showSecondaryValiues为false),它应该可以工作吗?

<ComboBox
        showSecondaryValues= "false"
        filterSecondaryValues="true"
        items="{
          path: '/CountriesCollection'
        }">
        <core:ListItem key="{key}" text="{text}" additionalText="{key}"/>
</ComboBox>