2017-01-15 10 views
0

"アイテム"がoData v2モデルにバインドされているsap.m.Tableがあります。削除アイコンをクリックしてアイテムを削除する必要があります。私がしていることは次のとおりです。 削除アイコンをクリックすると、モデルのすべての行が取得され、問題のモデルが削除され、モデルのプロパティが再び設定されます。 モデルは変更されているため、バックエンドの往復をトリガーし、最新のデータとテーブルに元の行を再度表示します。モデル変更時に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をデータモデルにバインドしませんでした。その代わりに手動で読み込みを開始しました。成功すると、受け取ったデータをローカルの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"の再読み込みがトリガされます。私はこれに対する解決策を見つけました。私の答えを見てください。 –

関連する問題