用于将项目过滤到组合框中的替代组合框,如何使用this.filter项

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

[我正在使用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-->

从控制器添加项目

javascript filter combobox sapui5
2个回答
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"));
        });

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


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>
© www.soinside.com 2019 - 2024. All rights reserved.