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

问题描述 投票:2回答:2

我有一个视图面板,我想根据文档中的值设置行中文本的颜色样式。

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

如果视图至少有一个文档,这完全正常,但如果视图为空,我会收到以下错误:

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

我猜它与rowData有关没有被创建除非文档存在,但我无法弄清楚如何检查它。

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

我该如何解决这个问题?

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

编辑:

感谢所有的输入,但我能够通过简单地检查视图计数来解决问题:

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

编辑2:

克努特有一个稍快的解决方案,所以我给了他信任。

xpages
2个回答
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()快一些ms :-))


1
投票

克努特正确地解释了你想要做的事情的解决方案。它不起作用的答案略有不同。 rowData是一个值得选择的名称,它将成为当前行的数据。但是,您要为整个DataView设置属性。整个DataView的当前行是什么?答案是,没有一个,因为你没有处理一个单独的行。


推荐问答