如何隐藏空面板?

时间:2016-05-26 14:15:11

标签: javascript sapui5

我有panels包含一些组件(表格,表格等) 我将子组件的visible属性与我的模型绑定。 有时,面板中的所有组件都不可见。

enter image description here

在这些情况下,我想让面板看不见。 我该怎么办?

这是我的面板代码:

<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>

如果我在visible聚合中控制Control的每个content属性,我就没有正确的结果,因为即使面板为空,SimpleForm也有{{1}属性设置为 true (默认)

3 个答案:

答案 0 :(得分:1)

我会使用表达式绑定使用Panel的所有内容绑定可见属性来设置Panel的visible属性:

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

但是,如果您的内容动态更改,我宁愿设置/删除内容,并检查Panel的内容聚合长度:隐藏长度0,否则可见

答案 1 :(得分:0)

然后还控制表单的可见性?

<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>

答案 2 :(得分:0)

我找到了解决方案:

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;
},

添加对格式化程序函数的引用:

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


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

现在我想在xml中插入表达式绑定和我的格式化程序函数

像这样的东西

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