2016-04-04 12 views
0

複数のエンティティタイプのデータを表示するxmlビューがあります(テーブルには両方のタイプの共通フィールドのみが表示されます)。 テーブル全体を動的にフィルタリングしたいので、手動で2つのバインディングを設定し、必要に応じてそれらをフィルタリングし、各フィルタ処理後に対応するテーブルモデルを再構築します。SapUi5で手作業でバインディングを作成するには?

しかし、私のバインディングは正しく機能しません。つまり、データを受け取ったり、フィルタリングしたりすることができません。

this.workOrderBinding = new Binding(this.getView().getModel(),)"/WorkOrderSet"); //Binding is of type sap.ui.model.odata.v2.ODataListBinding 
this.issueNoticeBinding = new Binding(this.getView().getModel(), "/IssueNoticeSet"); //Binding is of type sap.ui.model.odata.v2.ODataListBinding 

this.workOrderBinding.attachDataReceived(function() { 
    var tempModel = new JSONModel(); 
    tempModel.setData({ 
     WorkOrderSet: this.workOrderBinding.getModel().getData() 
    }, true); 
    tempModel.setData({ 
     WorkOrderSet: this.issueNoticeBinding.getModel().getData() 
    }, true); 
    this.getView().byId("table").setModel(tempModel); 
}, this); 

this.getView().getModel()はmanifest.jsonをで定義されたグローバルODataModelを返す:controller.jsで

+0

var oBinding = oModel.bindList("/Categories"); var handler = function() { oBinding.detachChange(handler); } oBinding.attachChange(handler); oBinding.initialize(); 
this.getView()。byId( "table")。getModel()、それをクリアして新しいデータに影響を与えます。 –

答えて

0

チェックアウト良い例の多くは、手動でバインディングリストを行うための

例があるQUnit Test for OData List Binding

あなたが作成し、新しいモデルを毎回設定するのではなく、最初の1スルーをアクセスすべきではありません
+0

リンクをありがとう、それは非常に有用ではありませんが。 'Model.bindList'や奇妙な回避策のような多くの文書化されていないメソッドを使います。しかし、 'attachChange'の代わりに' Binding.attachFilter'を使用すると、コールバックがうまく呼び出されますが、バインディングからフィルタリングされたデータを取得することができません。 'binding.getModel()。getProperty("/")'は、常にモデル全体のフィルタリングされていないデータを返します – oli

関連する問題