我有一个选择控件,我可以从用户名中选择。现在我想将该选择转换为组合框,这样我就可以为用户提供输入文本的能力。组合框中填充的值在文本属性中为{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..
}
你必须在你的函数中绑定它。我猜。当你在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"));
});
},