带有输入文本过滤的ComboBox - SAP UI5

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

我有一个选择控件,我可以从用户名中选择。现在我想将该选择转换为组合框,这样我就可以为用户提供输入文本的能力。组合框中填充的值在文本属性中为{FirstName},{LastName}。我不想使用额外的文本,因为它显示在行的末尾,其间有很多空格。我的组合框问题是:

值已填充,但如何过滤?已经有一些逻辑写在改变方法上。我想对值进行自定义过滤。例如:如果我写“P”,它应该显示文本中具有P的所有值(名字和姓氏)。在哪里写过滤功能?另外我在demokit中找到自定义过滤代码,我想使用它 - 但是当我在委托下的inti方法中使用它时,我得到错误 - this.get .... setfilterfunction()..不是函数

Moe w。 XML

<ComboBox items= "{path:'items>/name'}" id="A"
  selectedKey="{item>/Header/Name}" change="nameSelected">
<core:ListItem key="{order>NameID}" text="{order>LastName} ,{order>FirstName}"/>
 </ComboBox>    

Controller.js

_initializeData: function () {
var name = this.getView().byId("A");
 name.addEventDelegate({
      onAfterRendering: function() {
        this.getView().byId("A").setFilterFunction(function(sTerm, oItem) {
           return oItem.getText().match(new RegExp(sTerm, "i")) || 
                  oItem.getKey().match(new RegExp(sTerm, "i"));
        });
       }
      }, 

    nameSelected: function () {
     ......some logic processing..
   }
sapui5
1个回答
0
投票

你必须在你的函数中绑定它。我猜。当你在onAfterRendering部分放置一个断点时,你能访问this.getView()。byId(“A”)吗?

尝试此解决方案:您没有在正确的范围内工作。

 _initializeData: function () {

                var name = this.getView().byId("A");
                name.addEventDelegate({
                    onAfterRendering: this.setFilter.bind(this) });
            },


            setFilter: function() {
                this.getView().byId("A").setFilterFunction(function(sTerm, oItem) {
                    return oItem.getText().match(new RegExp(sTerm, "i")) ||
                        oItem.getKey().match(new RegExp(sTerm, "i"));
                });
            },
© www.soinside.com 2019 - 2024. All rights reserved.