如果视图没有文档,则找不到行数据var

时间:2019-04-26 20:40:49

标签: xpages

我有一个查看面板,我想根据文档中的值设置行中文本的颜色。

<xp:viewPanel id="dataView1" var="rowData" rows="5"
    rowClasses="#{javascript:rowData.getColumnValue('objectStatus') == 'Inactive' ? 'status-inactive' : ''}">

如果视图中至少有一个文档,这可以很好地工作,但是如果视图为空,则会出现以下错误:

  

com.ibm.xsp.exception.EvaluationExceptionEx:执行JavaScript计算表达式时出错
  执行JavaScript计算表达式时出错
  脚本解释器错误,行= 1,列= 10:找不到[ReferenceError]'rowData'

我猜想这与除非文档存在才创建rowData有关,但是我不知道如何检查它。

我尝试了if (rowData != null)!@IsNull(rowData),但仍然遇到相同的错误。

我该如何解决这个问题?

(请注意,我迟到了XPages游戏。)

编辑:

感谢大家的投入,但是我可以通过简单地查看视图来解决问题:

if (getComponent('dataView1').getRowCount() > 0) {
  'Inactive'.equals(rowData.getColumnValue('objectStatus')) ? 'status-inactive' : ''
}

编辑2:

Knut有一个更快的解决方案,所以我给了他荣誉。

2 个答案:

答案 0 :(得分:1)

Knut正确地解释了您要执行的操作的解决方案。为什么它不起作用的答案略有不同。 rowData是一个易于选择的名称,它将作为当前行的数据。但是,您要为整个DataView设置属性。整个DataView的当前行是什么?答案是,没有答案,因为您没有处理单个行。

答案 1 :(得分:1)

您可以使用if (typeof rowData !== 'undefined') ...对其进行测试。
如果视图为空,则rowData为'undefined'。

<xp:viewPanel id="viewPanel1" var="rowData" rows="5"
    rowClasses="#{javascript:  
        if (typeof rowData !== 'undefined')
            rowData.getColumnValue('objectStatus') == 'Inactive' ? 'status-inactive' : ''
    }">

(此解决方案可能比.getRowCount():-)快几毫秒)