智能表绑定和重新绑定(带有过滤器)的问题

2020-08-26 04:48发布

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

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


我有一个页面页面,该页面带有3个单选按钮和下面的一个智能表。 当我们登陆页面时,第一个单选按钮选项被选中,并且该选择的数据被获取并显示在表格中。 但是,当我更改单选按钮选择时,将获取新数据,并且可以在表中看到它,但是忙碌指示器不会停止并且看起来正在缓冲。 另外,在网络中,我看到了多个调用(即使是第一次进入页面,现在也发生了,即使我只执行一次,也看到了2个Odata调用)。 我已经编写了onBeforeRebindTable方法,其中传递了过滤器。 在我的OData请求中,我也想通过过滤器来获取数据,否则查询将不正确,并且我也不会从后端获取任何数据。 因此,在调用请求时必须通过过滤器。 但是以某种方式,这还不够,我需要在beforeRedbindTable方法中提及相同的过滤器,否则数据来自后端,但不会显示在表中。

除了我更改的第二个过滤器属性之外,用于获取任何单选按钮选择上的数据的代码如下:

 anyRadioButtonSelected:function(){
 var oModel,oView;
 var oFilters = [];
 oFilters.push(新sap.ui.model.Filter("别名",sap.ui.model.FilterOperator.EQ,"名称"));
 oFilters.push(新sap.ui.model.Filter(" RadioButtonOptionX",sap.ui.model.FilterOperator.EQ," X"));
 var that = this;
 oModel = new sap.ui.model.odata.ODataModel("/img/sap/opu/odata/sap/service_name/",false);
 oModel.read("/img/userSet",{
           异步:是的,
           过滤器:oFilters,
 成功:功能(oData,oResponse){
 sap.m.MessageToast.show("已提取数据");
 },
 错误:function(err){
 sap.m.MessageToast.show("数据提取错误");
 }
 });
 oModel.setCountSupported(false);
 oView = this.getView();
 oView.setModel(oModel);
 

smartTable.view.xml:

 
 

我已经给出了beforeRebindTable方法并在其中提到了过滤器。 如果我在这里没有提到过滤器,则由于某种原因该表将保持为空并且不会填充数据。 如果我删除了beforeRebindTable方法-表仍然为空。

我有以下疑问:

a)当我在主oData调用中已经提到过滤器时,为什么必须在beforeRebindTable中提及过滤器。
b)当我第一次使用默认选中单选按钮进入页面时,看到2个呼叫。
1)解码的通话1:sap/opu/odata/sap/service_name/userSet?$ filter = Alias eq'random'和RadioButtonOptionX eq'X'

2)解码的调用2:sap/opu/odata/sap/service_name/userSet?$ skip = 0&$ top = 139&$ filter = Alias eq'random'和RadioButtonOptionX eq'X'&$ select = FullName&$ inlinecount =所有页面

c)如何使忙碌的指标在表中停止(setBusy(false)和BusyIndi​​cator.hide())不起作用-我看到了背后的新数据,但忙碌不会停止。

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

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


我有一个页面页面,该页面带有3个单选按钮和下面的一个智能表。 当我们登陆页面时,第一个单选按钮选项被选中,并且该选择的数据被获取并显示在表格中。 但是,当我更改单选按钮选择时,将获取新数据,并且可以在表中看到它,但是忙碌指示器不会停止并且看起来正在缓冲。 另外,在网络中,我看到了多个调用(即使是第一次进入页面,现在也发生了,即使我只执行一次,也看到了2个Odata调用)。 我已经编写了onBeforeRebindTable方法,其中传递了过滤器。 在我的OData请求中,我也想通过过滤器来获取数据,否则查询将不正确,并且我也不会从后端获取任何数据。 因此,在调用请求时必须通过过滤器。 但是以某种方式,这还不够,我需要在beforeRedbindTable方法中提及相同的过滤器,否则数据来自后端,但不会显示在表中。

除了我更改的第二个过滤器属性之外,用于获取任何单选按钮选择上的数据的代码如下:

 anyRadioButtonSelected:function(){
 var oModel,oView;
 var oFilters = [];
 oFilters.push(新sap.ui.model.Filter("别名",sap.ui.model.FilterOperator.EQ,"名称"));
 oFilters.push(新sap.ui.model.Filter(" RadioButtonOptionX",sap.ui.model.FilterOperator.EQ," X"));
 var that = this;
 oModel = new sap.ui.model.odata.ODataModel("/img/sap/opu/odata/sap/service_name/",false);
 oModel.read("/img/userSet",{
           异步:是的,
           过滤器:oFilters,
 成功:功能(oData,oResponse){
 sap.m.MessageToast.show("已提取数据");
 },
 错误:function(err){
 sap.m.MessageToast.show("数据提取错误");
 }
 });
 oModel.setCountSupported(false);
 oView = this.getView();
 oView.setModel(oModel);
 

smartTable.view.xml:

 
 

我已经给出了beforeRebindTable方法并在其中提到了过滤器。 如果我在这里没有提到过滤器,则由于某种原因该表将保持为空并且不会填充数据。 如果我删除了beforeRebindTable方法-表仍然为空。

我有以下疑问:

a)当我在主oData调用中已经提到过滤器时,为什么必须在beforeRebindTable中提及过滤器。
b)当我第一次使用默认选中单选按钮进入页面时,看到2个呼叫。
1)解码的通话1:sap/opu/odata/sap/service_name/userSet?$ filter = Alias eq'random'和RadioButtonOptionX eq'X'

2)解码的调用2:sap/opu/odata/sap/service_name/userSet?$ skip = 0&$ top = 139&$ filter = Alias eq'random'和RadioButtonOptionX eq'X'&$ select = FullName&$ inlinecount =所有页面

c)如何使忙碌的指标在表中停止(setBusy(false)和BusyIndi​​cator.hide())不起作用-我看到了背后的新数据,但忙碌不会停止。

付费偷看设置
发送
4条回答
jovirus
1楼-- · 2020-08-26 05:43

你好 arati deshpande

请在下面找到我的答案:

a )当我已经在主要的oData调用中提到过滤器时,为什么必须在beforeRebindTable中提及过滤器。

不理解这个问题。 您在哪里提到了主要odata调用中的过滤器。

我的假设是,您正在将anyRadioButtonSelected中的代码编写为获取数据,为什么要这样做? 你不应该打电话给读对吗?

智能表将自动调用内部的read ..那么您为什么编写该代码呢?

b)当我第一次使用默认选择单选按钮进入页面时,我 请参阅2个呼叫。
1)解码的呼叫1:sap/opu/odata/sap/service_name/userSet?$ filter = Alias eq'random'和RadioButtonOptionX eq'X'

2)解码的呼叫2 :sap/opu/odata/sap/service_name/userSet?$ skip = 0&$ top = 139&$ filter = Alias eq'random'和RadioButtonOptionX eq'X'&$ select = FullName&$ inlinecount = allpages

在a =>点,您正在手动调用odata服务,smart tbale将再次发送读取请求,因此有2个调用。 再一次,您不需要再次手动调用read,智能表将处理它。

c)如何使繁忙的指标停止在表中(setBusy(false)和BusyIndi​​cator.hide( ))不起作用-我看到了背后的新数据,但是忙碌的事情不会停止。

不确定这个问题。您在onBeforeRebindTable中写了任何代码吗?

谢谢 ,

马西什语

槿木_熙
2楼-- · 2020-08-26 05:29

arati deshpande

为什么要在单选按钮选择事件中再次创建模型? 没必要。 您还可以创建ODataModel而不是V2.ODataModel。

您可以做的是,在单选按钮选择上,调用smarttable的rebindTable方法

https://ui5.sap.com/#/api/sap.ui.comp.smarttable.SmartTable%23methods/rebindTable

这将触发您的onBeforeRebindTable事件处理程序。

谢谢,
Mahesh

jovirus
3楼-- · 2020-08-26 05:28

,如果它是智能表, 您不必(或不应)自己进行odata调用。 ui与odatamodel和jsonmodel绑定的工作方式完全不同....

wang628962
4楼-- · 2020-08-26 05:39

Jun Wu 谢谢您的答复。 我已经修改了我的代码,并在上面的评论中提到了。 我仍然面临问题,我认为这是因为我在onBeforeRebindTable中添加了默认过滤器。

一周热门 更多>