Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止模型更改时的OData服务调用_Odata_Sapui5 - Fatal编程技术网

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

如何防止模型更改时的OData服务调用,odata,sapui5,Odata,Sapui5,我有一个sap.m.表,其“项”绑定到oData v2模型。我需要在单击删除图标时删除项目。以下是我的工作: 单击delete图标,我获得模型中的所有行,删除有问题的行,并再次设置模型的属性。 但是,由于模型已更改,它将触发后端往返,并带来最新数据,表将再次显示原始行 我尝试将绑定模式设置为OneTime,但不起作用。还尝试将RefreshAfterChange设置为false,但即使如此,服务仍被再次调用 这是我的密码- 控制器 onInit: function() { var oMo

我有一个sap.m.表,其“项”绑定到oData v2模型。我需要在单击删除图标时删除项目。以下是我的工作: 单击delete图标,我获得模型中的所有行,删除有问题的行,并再次设置模型的属性。 但是,由于模型已更改,它将触发后端往返,并带来最新数据,表将再次显示原始行

我尝试将绑定模式设置为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
}

我怎么能不再次触发往返?我需要在本地更新

您的方法不能与ODataModel一起工作,因为它是严格的服务器端。请使用相应的方法从服务器中删除实体。

由于Odata是服务器端模型,因此它总是触发往返。所以我没有将我的sap.m.表绑定到数据模型。相反,我手动触发了读取。成功后,我将收到的数据复制到本地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
    }    
}

后端中没有要删除的内容。odata服务对多个表进行连接并返回数据。我发现它是服务器端模型,所以我尝试将默认操作模式设置为“客户端”。它不起作用。从文档中我了解到,它是实验性的,目前只能用于排序和过滤。我正在尝试一种可能的方式来实现我想要的。如果这是有效的,我会在这里发布解决方案,如果没有什么要删除的话,为什么要删除呢?!没有意义。情况是,仪表板中应该显示的内容由表1控制。根据表1中维护的条目,连接在几个表上完成,这就是Odata服务“A”返回的数据。在“删除”按钮上,我需要从模型中删除条目,以便它不再显示在UI中。同时,另一个Odata删除服务“B”被触发,以从表1中删除条目。然而,模型中的这种更改也会触发数据服务“A”的再次读取。我找到了解决办法。看看我的答案。