2017-06-17 18 views
0

NorthwindデータベースへのODATA呼び出しを作成しました。バインディングを使用していて、把握できない質問がいくつかあります。モデルからODATA値を取得してメッセージボックスに表示する方法

この特定の例では、[ログイン]をクリックするとテキストボックスに値が表示され、同じメッセージを表示するメッセージボックスも開きますが、クリックすると何も表示されません。 2回目の後、それは動作します。 なぜこれが起こっていますか?

{CompanyName}を使用する代わりに、テキストボックスのバインドを動的に変更できるかどうかです。私はContactNameを取得したいと思いますが、SETVALUEを使用すると{ContactName}のテキストが印刷されます。再度、感謝します!

https://jsbin.com/nofunecane/1/edit?html,output

sap.m.MessageBox.alert(this.getView().getModel().getProperty("/Customers('ALFKI')/CompanyName")); 

これが成功の方法で新しいコードです: https://jsbin.com/gagajusoja/edit?html,output

答えて

1

私は非常にあなたの意図が何であったか取得していない、あなたは「にgetlogin」機能で何をしているかので、次のとおりです。

  1. 入力コントロールをidで取り出し、要素のバインディング(特定の顧客)を実行します。 xmlビューでは、Inputの値を(比較的)「CompanyName」プロパティにバインドします。そのため、「ログイン」ボタンをクリックすると、入力は顧客の会社名である「Alfred Futterkiste」によって自動的に入力されます"ALFKI"
  2. 次のコード行で、 "CompanyName"プロパティを取得しようとすると、その時にバインディングがバックエンドのデータフォームをロードしなかったため、空のメッセージボックスが表示されます(通常、 HTTPリクエストは非同期なので、データがロードされるまでしばらく待つ必要があります)。

bindElementの場合は、dataReceivedコールバックを使用してください。 だからあなたの関数は次のようになります。あなたの第二の質問については

getLogin: function(evt) { 
    var oModel = this.getView().getModel(); 
    this.byId("txtUid").bindElement({ 
     path: "/Customers('ALFKI')", 
     events: { 
      dataReceived: function(oResponse) { 
       sap.m.MessageBox.alert(oModel.getProperty("/Customers('ALFKI')/CompanyName")); 
      } 
     } 
    }); 

    this.getView().getModel().read("/Customers('ANATR')", { 

     success: function(oResponse) { 
      sap.m.MessageBox.alert(oModel.getProperty("/Customers('ANATR')/CompanyName")); 
     } 

    }); 
} 

、あなたがプログラムでbindPropertyメソッドを使用することができます。

+0

ありがとうございました!私はビンを変更したばかりのコンセプトを理解しましたが、成功メソッドが呼び出されないかのように、ポップアップは表示されません。私は何かを逃したのですか? \t \t \t \t \t \t this.getView()getModel() "/顧客( 'ANATR')"(読み取り、{ \t \t \t \t \t \t \tイベント:{ \t \t \t \t \t \t \t \t成功:関数(oResponse){ \t \t \t \t \t \t \t \t \t sap.m.MessageBox.alert(this.getView()。getModel()。getProperty( "/ Customers( 'ANATR')/ CompanyName"))); \t \t \t \t \t \t \t \t} \t \t \t \t \t \t \t} \t \t \t \t \t \t})。 https://jsbin.com/gagajusoja/edit?html,output –

+0

私の2番目の質問では、{CompanyName}の{ContactName}のtxtUidフィールド値を置き換えたいが、そのパラメータをtxtUidで更新することができなかったコード付き。ありがとう! –

+0

私は間違ったバインディングAPIを使用していたので私の答えを編集しました。今それは動作するはずです。 "dataReceived"コールバックがジョブを処理します。あなたのjsBinでは、コールバックコンテキストで "this"を失ってしまったので、 "var that = this"テクニックを使用するか、関数スコープの先頭に必要な変数を保存します。これは "oModel"の場合と同じです。 –

関連する問題