2017-02-06 4 views
0

私のアプリでは、従業員の選択(エンティティセットEmployeesListにバインドされている)と選択した従業員(AttAbsTypeにバインドされている)にデータを追加するエントリビューを持つマスタービューがあります。バインドされたDataSetのみを使用したXML式バインディングが可能ですか?

EmployeesListエンティティセットのフィールド「schkz」に基づいて、エントリビューでいくつかのフィールドを表示または非表示にしたいとします。現在のビューにバインドされているものとは異なるデータセットから値にアクセスできますか?

画面ロジックがある:

  1. 従業員の選択画面(schkz値を含む基本的なデータを読み取る)
  2. 詳細は、既存のエントリに新しいエントリを追加する
  3. エントリ・ビューを表示する表示します。ここでは、フィールドを表示/非表示にするために、選択した従業員のschkz値を使用したいと考えています。

モデル全体の画像:コンソールで Odata model

私は入力ビューにいる間、値が偶数があることをテストすることができます。

sap.ui.getCore().getModel("schkz"); 

しかし、詳細でビュー私は式バインディングのためにこの値を直接使用することはできません。私はこのように試してみました:

ビュー:

<Input id="__input0" visible="{= ${schkz} === 'NORM' }"/> 

私は隠されたラベルに値をコピーし、そのラベルを使用しようとしても、それは動作しません:

コントローラー:

this.byId("_label21").setText(schkz); 

ビュー:

visible="{= ${_label21} === 'NORM' }" 

私は画面の値を見ることができますが、式バインディングはそれを使用して動作しません。これは、本当にコアから値にアクセスできることをテストすることです。

これは式バインディングのみを使用しても可能ですか?そうでない場合は、これを動作させる最も簡単な方法は何ですか?論理的にそこに属していなくても、AttAbsTypeSetにフィールドを追加しますか?または、コントローラーですべてのことを行い、そこにフィールドを表示/非表示にしますか?

ありがとうございました! :)

+0

あなたのバインディングは意味をなさないので、動作しません。モデルデータの構造も投稿してください。一般に、マスタデータがロードされていることを確認できないため、詳細ビューでマスタデータをバインドすることは有効ではありません。マスターがロードされていないため、詳細ビューが直接ナビゲーションを介してロードされている場合、マスタはロードされないため、スモールデバイスにロードされない可能性があります。 – matbtt

+0

私はちょっと曇っていると思うのですが、私はバックエンド、今は詳細ビューで使用したいのですが、式バインディングについてはビューでは表示されません。 最初に従業員を選択せず​​に[詳細]画面に移動することは不可能です。したがって、私たちは常にschkzの価値を持っています。 ビューに表示するには、どこに貼り付ける必要がありますか?詳細ビューにバインドされているエンティティセットに追加する唯一のオプションはありますか? – Blackadder

+0

記載のとおり:あなたのデータの例を投稿してください。シュクツとは何ですか?それはモデル名か財産ですか?あなたの例からは明らかではありませんか? – matbtt

答えて

0

マスタービューから詳細ビューへのルーティング中に、パラメータを渡すことができます。それらは、navTo関数のパラメータオブジェクトとして渡されます。

this.getRouter().navTo("DetailsScreen", {selectedMasterId: <PlaceIdHere>}); 

次に、詳細画面コントローラで、このパラメータを読み、それに応じて詳細画面を設定することができます。

は、私はこのような詳細コントローラ上のinitメソッドにPatternMatchedイベントを取り付けることにより、これを行うだろう。このため

onInit: function() { 
    this.getRouter().getRoute("Details").attachPatternMatched(this.onPatternMatched, this); 
} 


onPatternMatched: function (oEvent) { 
    var thePassedID = oEvent.getParameter("arguments").selectedMasterId; 
    // Do logic with the ID next. 
} 

が動作するように、あなたはまた、マニフェストファイル内のパラメータを定義する必要があります。

"routing": { 
    ... 
    "routes" : [ 
     ... 
     { 
      "pattern": "Details/{selectedMasterId}" 
      "name": "Details" 
      "target": "Details" 
     }] 
    ... 
    } 

このパラメータは、URLで渡されるので、自分の目的に応じて、アドレスバーにユーザーが読み取ることができ、これは理想的ではないかもしれません。

ここから、表示しようとしているレコードのIDに基づいてバインドを設定し、詳細ビューでバインディングをこのように設定したデータモデルに関連付けることができます。

+0

アイデアありがとう!このように渡された場合、変数 "thePassedID"はビューの式バインディングで使用できると思いますか? – Blackadder

+0

コントローラのシンプルなjavascriptでこのように渡されたデータで、ビューのフィールドを設定することができます。 'this.getView()。byId(" idvalue ")。setText(thePassedID)'。私はこれがあなたが望むものだとは思わない。私はあなたが詳細ページの一次IDに基づいてビューのモデルを設定したいと思う。次に、相対的なバインディングをビューに定義します。 'this.getView()。setModel(themodelObject、" myModel ")'を使ってコントローラーで 'myModel'というビューのモデルを設定すると、' {myModel> myField} 'でモデルのフィールドを参照することができます。ビュー定義。 – RelativePeezyness

+0

あなたはそれが正しいです、私はその価値をどこにでも見せたくありません。私はちょうど私が2つのフィールドを表示するか隠すべきかを評価するためにそれを使用したいと思います。私はあまりにも曖昧だった、申し訳ありません。だから、私はこの "ヘルパー"モデルを作成してこの1つのフィールドを含むようにして使用することができましたか? – Blackadder

関連する問題