SAPUI5在运行时将operationMode更改为客户端

时间:2019-05-28 07:19:01

标签: sapui5

我在项目中使用SmartTable。

我首先需要从后端请求一些数据,然后再在前端处理接收到的数据。

根据数据,我需要从后端发送一些过滤器。

所以我需要开始使用operationMode Server,然后在数据到来后将其更改为Client

我的SmartTable xml

<smartTable:SmartTable id="ReportSmartTable" entitySet="OwnSet"
    tableBindingPath="/OwnSet" tableType="AnalyticalTable"
    beforeRebindTable="onBeforeRebindTable" >

onBeforeRebindTable

onBeforeRebindTable: function (oEvent) {
    console.log("onBeforeRebindTable");
    var oBindingParams = oEvent.getParameter("bindingParams");
    oBindingParams.filters.push(new sap.ui.model.Filter("Prop", "EQ", "Value"));
},

在onInit中,我设置了侦听器,以在接收数据后更改操作模式

var oTable = this.getView().byId("ReportSmartTable"); //Get Hold of the table control
oTable.attachDataReceived(function (oEvent) { //Hits when the data is received from back-end server
    this.getModel().defaultOperationMode = "Client"; //Set operation mode to Client
    var oSource = oEvent.getSource();
    oSource.bClientOperation = true; //Set Client Operation to true
    oSource.sOperationMode = "Client"; //Set operation mode to Client
}.bind(this));

我还尝试通过以下方式更改operationMode

this.getOwnerComponent().getModel().sDefaultOperationMode = "Client";
this.getOwnerComponent().getModel().defaultOperationMode = "Client";
this.getModel().sDefaultOperationMode = "Client"; //Set operation mode to Client
this.getModel().defaultOperationMode = "Client"; //Set operation mode to Client

但它不起作用。

如果我在接收到数据后进行了一些过滤,则仍然有后端请求。

通过从头开始设置Client operationMode,onBeforeRebindTable在请求之前被调用,但是过滤器未与batch一起发送

1 个答案:

答案 0 :(得分:0)

创建模型后,您将无法更新操作模式。即使您更新 private 属性sDefaultOperationMode,它也不会影响现有的绑定。

您可以为每个绑定指定operationMode,例如在列表中:

<List items="{path:'/myset',parameters:{operationMode:'Client'}}" ...>

,然后使用ListBase.bindItems使用不同的操作模式重新创建绑定。

但是对于SmartTable,您必须修改内部表绑定,这可能会破坏很多事情,因此不建议使用。也许Smart Table并非最适合您的用例。