2017-01-15 73 views
0

我有一個sap.m.Table,其「項目」綁定到oData v2模型。我需要刪除項目點擊刪除圖標。這裏是我所做的: 點擊刪除圖標,我得到模型中的所有行,刪除問題並重新設置模型的屬性。 但是,由於模型已更改,它將觸發後端往返行程,並將最新的數據和表格再次顯示原始行。如何在模型更改時防止OData服務調用

我試着將綁定模式設置爲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 
} 

我能不再次觸發往返?我需要在本地更新

回答

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 
    }  
} 
0

您的方法不適用於ODataModel,因爲它嚴格地說是服務器端。請使用相應的remove方法從服務器中刪除一個實體。

+0

在後端沒有什麼要刪除的。 odata服務在多個表上進行連接並返回數據。我已經知道它是服務器端模型,所以我嘗試將默認操作模式設置爲「客戶端」。它不起作用。從文檔中我明白它是實驗性的,只適用於目前的排序和過濾。我正在嘗試一種可能的方式來實現我想要的。如果有效,我會在這裏發佈解決方案 –

+0

爲什麼你刪除然後,如果沒有東西要刪除?!沒有意義。 – matbtt

+0

那麼情況是,應該在儀表板中顯示的內容由Table1來管理。根據Table1中維護的條目,連接在幾個表上完成,這就是Odata服務「A」返回的數據。在刪除按鈕我需要從模型中刪除條目,以便它不再顯示UI。同時觸發另一個Odata刪除服務「B」以從Table1刪除條目。但是,模型中的這種更改也會觸發數據服務「A」再次讀取。我找到了一個解決方案。看到我的答案。 –

相關問題