2016-06-28 8 views
0

私はカラムにsap.m.Inputがあるテーブルを持っています。このテーブルはモデルを持っていますが、入力フィールドのために私は異なるモデルからアイテムを提案する必要があります。以下はコードですが、正常に動作していません。何か別の方法を提案するか、エラーを修正するのを手伝ってください。sap.m.inputの別のモデルからアイテムを推薦する方法は?

new sap.m.Input({value:'{CUST_NAME}', 
        showSuggestion:true, 
        liveChange : function(oEvent) { 
         console.log(oEvent.getSource().getValue()); 
          console.log(this.getValue());          
          if (this.getValue().length > 0) {   
          var oModel = new sap.ui.model.json.JSONModel(); 
          var serviceUrl = "/serviceurl/?$filter=startswith(Name,%27an%27)"; 
          oModel.loadData(serviceUrl,null, false, "GET",false, false, null); 
          this.setModel(oModel); 
          console.log(oModel) 
          this.bindAggregation("suggestionItems", "/d/results", new sap.ui.core.Item({text: "{Name}"})); 
          } 
        }   
    }) 

答えて

0

named modelを使用してください。 setModel(oModel,sModelName)関数は、モデルの名前を渡すために2番目のオプションを取ります。したがって、名前が異なる限り、すべてのコントロールは複数のモデルを持つことができます。

名前付きモデルにアクセスするには、バインディングに接頭辞modelName>を使用します(絶対バインディングと相対バインディングに使用する必要があります)。

あなたのケースでは、毎回提案項目の新しいモデルを作成する必要はありません。

var oSuggestionModel = new sap.ui.model.json.JSONModel(); 
    oSuggestionModel.forceNoCache(true); 
    new sap.m.Input({value:'{CUST_NAME}', 
        showSuggestion:true, 
        suggestionItems: { 
         path: 'suggestion>/d/results', 
         template: new sap.ui.core.Item({text: "{suggestion>Name}"}) 
        }, 
        liveChange : function(oEvent) { 
         console.log(oEvent.getSource().getValue()); 
          console.log(this.getValue()); 
          //eventually clear the model: oSuggestionModel.setData({}); 
          if (this.getValue().length > 0) {   
          var serviceUrl = "/serviceurl/?$filter=startswith(Name,%27an%27)"; 
          oSuggestionModel.loadData(serviceUrl); 
          } 
        }   
    }).setModel(oSuggestionModel, "suggestion"); 

また、同期データをロードする必要はありません。バインディングを設定すると、モデルが後で埋められるときにデータが自動的に表示されます。

+0

ありがとうございます。提案が入力フィールドの上向きの方向に来ているが、私はそれらを下向きにする必要があるという1つの問題があります。私が初心者であるので、私はそれをやる方法を得ていません –

+0

通常、以下の十分なスペースがない場合、入力フィールドの上に提案が表示されます。あなたはそれを試すことができます(https://sapui5.netweaver.ondemand.com/sdk/explored.html#/sample/sap.m.sample.InputSuggestionsDynamic/preview):非常にスリムな高さとタイプ*例えばh *。 – schnoedel

+0

私は現在、モデルとフィルタを使用しているサービス呼び出しの代わりに、今問題に直面しています。それでは、どのようにバインディングを実行してフィルタリングを実行しますか。私はoEvent.getSource()。getBinding()を使用していますが、未定義です。助けてください –

関連する問題