Sapui5过滤ComboBox的内容

时间:2016-06-15 11:56:07

标签: javascript sapui5

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

用语言说: 1)我通过ID获得控制权。 2)我得到聚合"项目"的绑定。 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的一般问题

问题在于代码可以在视图中使用独立的ComboBox,但是组合框嵌入到具有此comboBox的多个出现的List结构中。

我认为我在获取组合框的相关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>

1 个答案:

答案 0 :(得分:0)

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

您可以在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吗?