我在项目中使用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
一起发送
答案 0 :(得分:0)
创建模型后,您将无法更新操作模式。即使您更新 private 属性sDefaultOperationMode
,它也不会影响现有的绑定。
您可以为每个绑定指定operationMode
,例如在列表中:
<List items="{path:'/myset',parameters:{operationMode:'Client'}}" ...>
,然后使用ListBase.bindItems
使用不同的操作模式重新创建绑定。
但是对于SmartTable
,您必须修改内部表绑定,这可能会破坏很多事情,因此不建议使用。也许Smart Table并非最适合您的用例。