如何通过sapui5中的控制器过滤列表

2020-09-21 18:17发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嘿,我是SAPUI5的新手,我的App有点问题。 我设置了一个主从应用程序,该应用程序在主视图中显示了一个客户列表。

我的目标是将此列表过滤到oData Service的任何属性(我正在使用Northwind Webservice)。

在这里您可以看到一个包含我的视图列表的代码段(MasterView.xml):

 <列表
 id =" list"
 items =" {
 路径:"/客户",
 分类器:{
 路径:" CompanyName",
 降序:假
 },
 groupHeaderFactory:"。createGroupHeader"
 }"
 busyIndi​​catorDelay =" {masterView>/delay}"
 noDataText =" {masterView>/noDataText}"
 mode =" {= $ {device>/system/phone}?'无':'SingleSelectMaster'}"
 growth =" true"
 growthScrollToLoad =" true"
 updateFinished =" onUpdateFinished"
 selectionChange =" onSelectionChange">
 
 <工具栏
 active =" true"
 id =" filterBar"
 visible =" {masterView>/isFilterBarVisible}"
 按=" onOpenViewSettings">
 <标题
 id =" filterBarLabel"
 text =" {masterView>/filterBarLabel}"/>
 
 
 <项目>
 
 
 
 
 

这是我在控制器(Master.controller.js)中所做的事情:
请不要只在//Tryout Filter和//End Tryout之间的注释之间插入代码。

当我想运行我的应用程序时,调试器会说:"无法读取未定义的属性'filter'",因为oBinding是未定义的。 希望大家能帮助我。 我只想在应用程序加载到用户屏幕时应用过滤器。

非常感谢和问候

 onInit:函数(){
//控制状态模型
 var oList = this.byId(" list"),
 oViewModel = this._createViewModel(),
//放下主列表的原始值以延长繁忙指示器的时间,
//,以便以后可以恢复。 主列表上的忙处理是
//由主列表本身负责。
 iOriginalBusyDelay = oList.getBusyIndi​​catorDelay();
//试用过滤器
 var equals = FilterOperator.EQ;
 var aFilterFoo = [];
 aFilterFoo.push(new Filter(" Country",equals," Germany"));
 var oBinding = oList.getBinding(" items");
 oBinding.filter(aFilterFoo);
//结束试用过滤器

 this._oList = oList;
//保持过滤器和搜索状态
 this._oListFilterState = {
 aFilter:[],
 aSearch:[]
 };


 this.setModel(oViewModel," masterView");
//确保忙碌指示立即显示,因此没有
//在加载视图的元数据的繁忙指示之后中断
//结束(请参阅AppController中的Promise'oWhenMetadataIsLoaded')
 oList.attachEventOnce(" updateFinished",function(){
//恢复列表的原始繁忙指示器延迟
 oViewModel.setProperty("/img/delay",iOriginalBusyDelay);
 });

 this.getView()。addEventDelegate({
 onBeforeFirstShow:function(){
 this.getOwnerComponent()。oListSelector.setBoundMasterList(oList);
 } .bind(this)
 });


 this.getRouter()。getRoute(" master")。attachPatternMatched(this._onMasterMatched,this);
 this.getRouter()。attachBypassed(this.onBypassed,this);

 },
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嘿,我是SAPUI5的新手,我的App有点问题。 我设置了一个主从应用程序,该应用程序在主视图中显示了一个客户列表。

我的目标是将此列表过滤到oData Service的任何属性(我正在使用Northwind Webservice)。

在这里您可以看到一个包含我的视图列表的代码段(MasterView.xml):

 <列表
 id =" list"
 items =" {
 路径:"/客户",
 分类器:{
 路径:" CompanyName",
 降序:假
 },
 groupHeaderFactory:"。createGroupHeader"
 }"
 busyIndi​​catorDelay =" {masterView>/delay}"
 noDataText =" {masterView>/noDataText}"
 mode =" {= $ {device>/system/phone}?'无':'SingleSelectMaster'}"
 growth =" true"
 growthScrollToLoad =" true"
 updateFinished =" onUpdateFinished"
 selectionChange =" onSelectionChange">
 
 <工具栏
 active =" true"
 id =" filterBar"
 visible =" {masterView>/isFilterBarVisible}"
 按=" onOpenViewSettings">
 <标题
 id =" filterBarLabel"
 text =" {masterView>/filterBarLabel}"/>
 
 
 <项目>
 
 
 
 
 

这是我在控制器(Master.controller.js)中所做的事情:
请不要只在//Tryout Filter和//End Tryout之间的注释之间插入代码。

当我想运行我的应用程序时,调试器会说:"无法读取未定义的属性'filter'",因为oBinding是未定义的。 希望大家能帮助我。 我只想在应用程序加载到用户屏幕时应用过滤器。

非常感谢和问候

 onInit:函数(){
//控制状态模型
 var oList = this.byId(" list"),
 oViewModel = this._createViewModel(),
//放下主列表的原始值以延长繁忙指示器的时间,
//,以便以后可以恢复。 主列表上的忙处理是
//由主列表本身负责。
 iOriginalBusyDelay = oList.getBusyIndi​​catorDelay();
//试用过滤器
 var equals = FilterOperator.EQ;
 var aFilterFoo = [];
 aFilterFoo.push(new Filter(" Country",equals," Germany"));
 var oBinding = oList.getBinding(" items");
 oBinding.filter(aFilterFoo);
//结束试用过滤器

 this._oList = oList;
//保持过滤器和搜索状态
 this._oListFilterState = {
 aFilter:[],
 aSearch:[]
 };


 this.setModel(oViewModel," masterView");
//确保忙碌指示立即显示,因此没有
//在加载视图的元数据的繁忙指示之后中断
//结束(请参阅AppController中的Promise'oWhenMetadataIsLoaded')
 oList.attachEventOnce(" updateFinished",function(){
//恢复列表的原始繁忙指示器延迟
 oViewModel.setProperty("/img/delay",iOriginalBusyDelay);
 });

 this.getView()。addEventDelegate({
 onBeforeFirstShow:function(){
 this.getOwnerComponent()。oListSelector.setBoundMasterList(oList);
 } .bind(this)
 });


 this.getRouter()。getRoute(" master")。attachPatternMatched(this._onMasterMatched,this);
 this.getRouter()。attachBypassed(this.onBypassed,this);

 },
 
付费偷看设置
发送
4条回答
Doze时光
1楼-- · 2020-09-21 18:47

不对init进行过滤。 其次,使用滤镜数组添加多个属性作为滤镜

南山jay
2楼-- · 2020-09-21 18:44

为什么在初始化时不进行滤镜? 有什么问题?

土豆飞人
3楼-- · 2020-09-21 19:04

您可以使用$ .grep

解决此问题
 NewODAta = $ .grep(AllTheData,function(obj){
//如果需要,您可以在此处检查所有键。请在此处执行逻辑。 返回obj.dataKey.indexOf(UserInput)!== -1; }); this.getVeiw()。getModel(" SomeModel")。setProperty("/",新的JSONModel(NewData))
宇峰科技
4楼-- · 2020-09-21 19:03

init,如果我没有记错的话,那时没有绑定。

 var oBinding = oList.getBinding(" items"); //此行代码没有任何帮助,这就是您失败的原因。

我认为您可以在xml视图中删除绑定。 并使用bindaggregation在初始化中进行绑定

https://sapui5.hana。 ondemand.com/#/api/sap.ui.base.ManagedObject/methods/bindAggregation

您在init中准备的过滤器可以在该api中使用。

一周热门 更多>