我试图在运行时根据另一个ComoboBox 的选定值来过滤ComboBox 的内容,但不知何故我的过滤器代码不起作用。
用文字来说:
但是没有任何反应,这里是示例代码:
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>
您可以使用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);
}
您似乎没有将过滤器设置到正确的组合框:
您在
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
吗?