[我正在使用UI5框架v1.38.39,我想做一个自定义组合框(没有sap.m.Combobox
而是custom.comboboxsearch
(包括sap.m.combobox
和sap.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-->
从控制器添加项目
嗯,我不知道我是否正确理解您的问题,但我想这就是您想要的。
<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"));
});
因此您可以搜索无关紧要的键或文本
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>