如何防止对模型更改的OData服务调用

时间:2017-01-15 21:37:20

标签: odata sap sapui5

我有一个sap.m.Table,其中" items"绑定到oData v2模型。我需要删除点击删除图标上的项目。这是我做的: 点击删除图标,我获取模型中的所有行,删除有问题的行并再次设置模型的属性。 但是,由于模型已更改,它会触发后端往返并带来最新数据,表格再次显示原始行。

我尝试将绑定模式设置为OneTime,但这不起作用。还尝试将RefreshAfterChange设置为false,但即使再次调用了服务。

这是我的代码 -

控制器

onInit: function() {
    var oModel = new sap.ui.model.odata.v2.ODataModel("url", {
        json: true,
        useBatch : false,
        refreshAfterChange: false,
        defaultBindingMode: "OneTime"
    });

    this.getView.().setModel(oModel, "model1");
},

onDeleteIconPress : function(oEvent) {
    // get the selected row
    // get all the rows in oOriginalRows
    // loop over oOriginalRows and delete the selected row from it

    // set the model to reformed oOriginalRows
    this.getView().getModel("omodel1").setProperty("/", oOriginalRows);
   // Till this point every thing looks fine. I can see changes in the model
    // refresh is called automatically and data service triggers backend call
    // This fetches original data again and table shows all data again
}

怎样才能再次触发往返?我需要更新本地

2 个答案:

答案 0 :(得分:0)

您的方法不适用于ODataModel,因为它是严格的服务器端。请使用相应的remove方法从服务器中删除实体。

答案 1 :(得分:0)

由于Odata是服务器端模型,它总是触发往返。所以我没有将我的sap.m.Table绑定到Data模型。相反,我手动触发了读取。成功后,我将收到的数据复制到本地JSON模型。我将表项绑定到此JSON模型。现在删除按钮工作得很好。

// Define a JSON Model
oJsonModel = new sap.ui.model.json.JSONModel();

//oModel is Odata model defined in manifest file
oModel.read("/entity1", {
    success: function(oData, oResponse){
        oJsonModel.setProperty("/entity1", oData.results);

        // bind oJsonModel to table here
    }    
}