我有一个select控件,可以从用户名中进行选择。现在,我要将选择的内容转换为组合框,以便使用户也可以输入文本。组合框中填充的值在文本属性中为{FirstName},{LastName}。我不想使用额外的文本,因为它显示在行尾且中间有很多空格。我的组合框问题是:
填充值,但如何过滤?在更改方法上已经编写了一些逻辑。我想对值进行自定义过滤。例如:如果我写“ P”,它应该在文本中显示所有带有P的值(名字和姓氏)。在哪里写过滤功能?另外我在demokit中找到了自定义过滤代码,我想使用它-但是当我在委托下的inti方法中使用它时,出现错误-this.get .... setfilterfunction()..不是函数
View.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..
}
答案 0 :(得分: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"));
});
},