2016-06-29 6 views
0

私はテーブル行に2つのsap.m.ComboBoxを持っています。 2番目のコンボボックスの項目は、最初のコンボボックスの選択によって異なります。以下は、私が書いたコードですが、2番目のComboBoxのアイテムをリフレッシュしていません。コントローラ別のコンボボックスの選択に基づいて、1つのコンボボックスのモデルを更新する方法は?

comboBoxMapping:function(oEvent){ 
    var filterMappingModel = \\getting the model; 
    sap.ui.getCore().byId("SecondComboBox").setModel(filterMappingModel); 
    sap.ui.getCore().byId("SecondComboBox").bindItems('/', new sap.ui.core.Item({key: '{Skill}',text: '{Skill}'}),true); 
} 

var firstCombo = new sap.m.ComboBox({items:[new sap.ui.core.Item({text:"EmployeeLevel4"}), 
               new sap.ui.core.Item({text:"EmployeeLevel3"})], 
              selectionChange : oController.comboBoxMapping}); 

var secondCombo = new sap.m.ComboBox("SecondComboBox",{}); 

それを正しくimpelemetするために私にいくつかの選択肢を提案します。最初のコンボのselectionChangeイベントハンドラで

答えて

0

、あなたは、2番目のコンボのitemsContextBindingfilterを設定する必要があります。例:

this.getView().byId("secondComboBox").getBinding("items").filter([ 
     new sap.ui.model.Filter(
       "CategoryID", 
       "EQ", 
       oEvent.getParameter("selectedItem").getKey()) 
]); 

この動作を確認するには、this jsbinをご覧ください。

この回答の回答で述べたように、上記の例では、コンボボックスのバインディングを変更する方法のみを示しています。あなたのコンボボックスはテーブルに埋め込まれているので、テーブルの中にいくつかあるので、コンボボックスのどれを変更する必要があるかを最初に突き止める必要があります。

oEvent.getSource()を見ると、ちょうど変更されたコンボが表示されるはずです。そこからgetParent()を使用して、行に到達するまでコントロール階層内に入ることができます。その行に複数の列があり、その列の1つにSecondComboボックスが含まれている必要があります。どの行にSecondComboが含まれているかわかっている場合は、前述のようにbyIdを使用して取得してフィルタを設定することができます。

+0

OPはコンボボックスがテーブルにあるので、IDで参照することはできません。私は恐れています... – Qualiture

+0

あなたは正しいです。その部分を完全に上書きします。 OPはもう少し作業をしなければならない:テーブルの行を取得し、彼女がフィルタを設定する必要があるコンボボックスが含まれているテーブルの行を見つけることを試みる。 – jpenninkhof

+0

ええ、バインドされたデータに基づく不適切なフィルタリングは不可能です。古代の問題https://github.com/SAP/openui5/issues/130を参照してください。 – Qualiture

関連する問題