2017-01-26 3 views
0

JSONモデルに親子関係があります。私はObjectListを使って親をリストするビューを持っています。このリスト内の項目のpressイベントは、同様のObjectListが選択した親の子を表示する別のビューに移動します。子を表示するビューで選択した親の名前を表示します。

子を表示するビューのタイトルに親の属性を含めるようにしたいと考えています。例えば、モデルがある場合:次に

{ 
    "parents": [ 
     { 
     "name": "Spartacus","children": [{"name": "Spartacus Jnr"}, {"name": "Little Spartacus"}] 
     }, 
     {"name": "Rasputin", "children": [{"name": "Grigori"}, {"name": "Yefimovich"}] 
     }, 
     {"name": "Sting", "children": [{"name": "Josepth"}, {"name": "Fuchsia"}]} 
      ] 
} 

私は親のスパルタカス」を選択した場合、その後の子どもを示す図でタイトルChildren of Spartacusとして持つべきです。

重要:さまざまな理由から、子ビューは子配列にバインドされています。子ビューを親にバインドし、ObjectListパスを/childrenに設定すると、これが私の問題を解決します。私はまた、ビューのobjectContextのパスを取得し、それを切り詰めて親の値を取得することができます - しかし、それはclunkyとにかく私はXMLビューの宣言を使用して感じる。全体的に私は頑固で好奇心が強く、相対パスを使って上向きのトラバーサルについて知りたいと思っています。

私は1つの中と同じように、例えば、二重ドットを使用して、相対パスのアプローチを試みたのxpathています

headerText="Children of {../name}" 

しかし、これは動作しません。私はUI5のバインディングについて多く説明しましたが、ここで必要とされるようにモデルをトラバースすることについては何も話しません。誰かがソリューションを提供するドキュメントへのソリューションやリンクを手助けできますか?

答えて

0

デフォルトのJSONBinding実装は、パストラバーサルをサポートしていません。しかし、必要な場所で別のバインディングコンテキストを設定することで、簡単に問題を解決することは可能です。これをシミュレートするexampleを作成しました。子どもを含むリストの項目の集約が直接子どもの配列にバインドされています。親の名前を表示するには

let path = "/parents/0"; 
let childrenTable = this.byId("children"); 
childrenTable.bindAggregation("items", { 
    "path" : path + "/children", 
    "template" : new StandardListItem({ "title" : "{name}"}) 
}); 

、私はリストにツールバーを追加し、モデルで対応する親にバインドします。

childrenTable.getAggregation("headerToolbar").bindElement(path); 
+0

別の便利なテクニックをありがとう。私は軽く驚いています。これは共通のパターンでなければならないため、UI5は簡単な方法を提供しません。また、宣言的なXMLビューのアプローチの能力をある程度まで薄くします。 –

+1

子配列を表示するビューのバインディングコンテキストを、子配列ではなく親に設定します。他のフレームワークがこれをサポートしているかどうかはわかりませんが、UI5は独自のバインディング構文をプラグインできるだけの柔軟性があります。 ;) – matbtt

1

ODataの場合は、子オブジェクト内の親へのリンクがあり、それを参照することができますが、わかっている限り、JSONModelの場合のように上向きの関係はありません。

本当にあなた自身の質問に答えました。あなたがしたいことは、ビューを親にバインドし、子を相対パスで参照することです。私はこれがちっちゃいとは思わない。欠点は何ですか?モデルに同じデータをロードしていても、それは論理的な方法で構成されています。

実際には、上記のようにoDataModelをロードすると、モデルに反復値が追加され、ビューが別にバインドされている可能性がある場合に明白な利点はありません。

+0

ありがとうございました - この質問は、JSONモデルで上向きのトラバーサルを必要とするように考案されました。一つのことは、AFAIKが私がモデルの子配列にバインドするために使用する1つのバインディング機会を持つListコントロールを使用していることです。しかし、私はLIst.headerTextを他のものに束縛することはできません。これが、上向きのトラバーサル要件の理由でした。また、Matbttがヘッダーとして別のテキストフィールドを使用している理由もあります。あなたの考えをありがとう。 –

0

私自身の問題を回避するには、それが宣言型のXMLビューのパワーを希釈するように私はこれに不満を持ったまま

var list = this.byId("ChldrenList") 
list.setHeaderText('Children for ' + mdlParent.name) 
// where mdlParent.name is my arbitrary model and attribute to be displayed. 

を使用し、子供たちが見るために、コントローラに親の名前を取得するために工夫することですアプローチ。しかし、私の上司は、それを吸って、8-に移動すると言っています。

+2

上司はいつも正しいです....職場や家庭で。 :D – matbtt

関連する問題