如何根据绑定结果隐藏控件

How to hide a control based on the binding result

我认为几乎所有内容都在标题中。这是一个例子:

<Select id="catComboBox" change="onChangeCat" items="{ path: '/ReasonCategorySet', sorter: { path: 'Zcat' } }">
    <core:Item key="{Zcat}" text="{Zdesc}"/>
</Select>

根据连接的用户,Select可能是空的,一旦我知道那里没有数据,我想隐藏这个控件。

如何检测控件是否成功加载数据?

确定找到解决方案 x) :

代码如下:

this.oModel.attachRequestCompleted(function(data) {
    if (that.getView().byId("catComboBox").getItems().length === 0) {
      that.getView().byId("catComboBox").setVisible(false);
    }
  })

或者,您可以将可见的 属性 绑定到同一模型 属性 并使用特殊的格式化程序来评估类别集是否有任何项目。

<Select id="catComboBox" 
        change="onChangeCat" 
        items="{ path: '/ReasonCategorySet', sorter: { path: 'Zcat' } }"
        visible="{ path: '/ReasonCategorySet', formatter: 'checkCount' }">
    <core:Item key="{Zcat}" text="{Zdesc}"/>
</Select>

checkCount 可以是这样的:

checkCount: function(aItems) {
  return Array.isArray(aItems) && aItems.length > 0;
}

最短的可能解决方案是表达式绑定。可以找到示例 here.

<Select id="catComboBox" 
        change="onChangeCat" 
        items="{ path: '/ReasonCategorySet', sorter: { path: 'Zcat' } }"
        visible="{=${/ReasonCategorySet}.length > 0}">
    <core:Item key="{Zcat}" text="{Zdesc}"/>
</Select>