2016-05-26 13 views
0

Ich habe panels, die einige Komponenten (Tabellen, Formulare usw.) enthalten Ich binde visible Eigenschaften von Unterkomponenten mit meinem Modell. Manchmal sind alle Komponenten in einem Panel nicht sichtbar.Wie verstecken Sie ein leeres Panel?

enter image description here

In diesen Fällen würde Ich mag Panel unsichtbar machen. Wie kann ich es tun?

das ist mein Panel Code:

<Panel expandable="true" expanded="true"> 
    <content> 
     <f:SimpleForm> 
      <Label text="MyLabel" /> 
      <Input visible="false" /> //set by a model binding, or by a function...or in other mode 
     </f:SimpleForm> 
    </content> 
</Panel> 

Wenn ich jede visible Eigenschaft der Kontrolle in content Aggregation steuere ich da kein richtiges Ergebnis, auch wenn die Platte leer ist, SimpleFormvisible Eigenschaft festgelegt haben zu wahr (default)

+1

können Sie – David

Antwort

0

fand ich eine Lösung:

emptySimpleForm: function (a) { 
     var bVisible = false; 

     var aFormElements = this.mAggregations.form.mAggregations.formContainers[0].mAggregations.formElements; 
     _.forEach(aFormElements, function (oEl) { 

      _.forEach(oEl.mAggregations.fields, function(oFld){ 
       if (oFld.getProperty('visible') === true) 
        bVisible = true; 
      }) 
     }) 
     return bVisible; 

}, 

emptyPanel: function (a) { 
     var bVisible = false; 

     var aContent = this.mAggregations.content; 
     _.forEach(aContent, function (oEl) { 
      if (oEl.getProperty('visible') === true) 
       bVisible = true; 
     }) 

     return bVisible; 
}, 

eine Referenz hinzugefügt Funktionen Formatierer:

<Panel visible="{path: 'model>/', formatter: 'ui5bp.Formatter.emptyPanel'}" /> 


<f:SimpleForm visible="{path: 'model>/', formatter: 'ui5bp.Formatter.emptySimpleForm'}" /> 

Jetzt würde ich Bindung und meine Formatierer Funktion Insert in der xml einen Ausdruck wie

So etwas wie

visible="{= ${myPropOnModel} &amp;&amp; ui5bp.Formatter.emptyPanel }" 
1

ich die visible Eigenschaft des Panel Ausdruck gebunden sichtbare Eigenschaften mit Hilfe Bindung mit der alle Panel Inhalt gesetzt würde:

<Panel visible="{= ${tableVisible} || ${/formVisible} || ${someOtherControlVisible} }"> 
    <content> 
     <Table visible="{tableVisible}">...</Table> 
     <Form visible="{formVisible}">...</Form > 
     <Input visible="{someOtherControlVisible}">...</Input> 
    </content> 
</Panel> 

Allerdings, wenn Ihr Inhalt ändert sich dynamisch, würde ich lieber gesetzt/den Inhalt entfernen, und prüfen, ob die Content-Aggregation Länge Panel: Eine Länge von 0 bis zu verstecken, sonst sichtbar

+0

Code teilen, wenn ich jede Eigenschaft visible of Control steuern in Content-Aggregation ich da keine richtige Ergebnis, auch wenn die Platte leer ist, haben Simple visible-Eigenschaft auf true (Standardeinstellung) . Siehe meinen neuen Q-Zusatz – padibro

+1

Warum ist das nicht korrekt? Wenn es in Ihrem 'SimpleForm' keine sichtbare Kontrolle gibt, warum würden Sie dann immer noch das Panel anzeigen? Es macht keinen Sinn, ein Formular mit allen Steuerelementen unsichtbar anzuzeigen ;-) – Qualiture

+0

Meine Antwort ist gut, aber jetzt möchte ich in den XML-Code einen Ausdruck einfügen, der AND meine Formatiererfunktion bindet – padibro

0

Dann steuern auch die Sichtbarkeit der Form?

<Panel 
    visible="{= ${labelVisible} || ${/inputVisible} }" 
    expandable="true" 
    expanded="true"> 
    <content> 
     <f:SimpleForm visible="{= ${labelVisible} || ${/inputVisible} }"> 
      <Label text="MyLabel" visible="{/labelVisible}"/> 
      <Input visible = "{/inputVisible}"/> 
     </f:SimpleForm> 
    </content> 
</Panel> 
Verwandte Themen