2016-10-28 5 views
0

Ich habe Daten für UI5 in den kommenden wie folgt aussehen:.UI5: Bind Daten dynamisch

"results": [ 
{ 
    "ItemType": "AAA", 
    "AAA": { 
     "Name": "Name of AAA" 
    }, 
    "BBB": null, 
    "CCC": null 
}, 
{ 
    "ItemType": "BBB", 
    "BBB": { 
     "Name": "Name of BBB" 
    }, 
    "AAA": null, 
    "CCC": null 
}, 
{ 
    "ItemType": "CCC", 
    "CCC": { 
     "Name": "Name of CCC" 
    }, 
    "AAA": null, 
    "BBB": null 
}] 

ich sie in ein XML-View-Element binden möchten und erhalten das Name Bereich, was auch immer Element in dem ich mich als in der Nähe von wie ich kann sagen, ich brauche so etwas wie dies zu tun:

<Text text="{= ${Data&gt;ItemType} === 'AAA' ? 
    ${Data&gt;AAA/Name} : 
    ${Data&gt;ItemType} === 'BBB' ? 
     ${Data&gt;BBB/Name} : 
     ${Data&gt;ItemType} === 'CCC'? 
      ${Data&gt;CCC/Name} : 
      'Unknown Type'} 
    "/> 

Dies funktioniert, aber ich kann das Gefühl nicht los es ein besserer Weg, um die gleiche Sache zu tun. Zumindest muss ich dieses hässliche Inline für jedes ähnliche Element wiederholen.

Ich habe versucht, so etwas wie dieses (und viele Varianten davon) zu tun:

{= Data&gt;${Data&gt;ItemType}/Name} 

Offensichtlich hat es nicht funktioniert.

Gibt es einen besseren Weg, dies zu tun?

Antwort

0

Nein, es gibt keinen besseren Weg. Dynamische Datenbindung wird nicht unterstützt.

Eine Alternative wäre, eine Factory-Funktion für die Aggregationsbindung zu verwenden. das würde die meisten hässlichen Sachen auf den Controller übertragen, also ist es wahrscheinlich keine bessere Lösung.

Sie könnten jedoch Ihre Modelldaten in etwas geeigneteres zum Binden direkt nach dem Empfang der Daten umwandeln.

0

Können Sie eine Formatierungsfunktion verwenden? Das würde den Code in einen einzigen wiederverwendbaren Block aufräumen. Sie werden weiterhin die 'if'-Logik benötigen, aber im Formatierer eingeschlossen.