Данные строки var не найдены, если в представлении нет документа - PullRequest
2 голосов
/ 26 апреля 2019

У меня есть панель просмотра, в которой я хочу стилизовать цвет текста в строке на основе значения в документе.

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

EDIT:

Спасибо всем за ввод, но я смог решить проблему, просто проверив количество просмотров:

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

РЕДАКТИРОВАТЬ 2:

У Кнута есть более быстрое решение, поэтому я дал ему должное.

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Вы можете проверить это с помощью 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 ():-))

1 голос
/ 29 апреля 2019

Кнут правильно объясняет решение того, что вы пытаетесь сделать. Ответ на то, почему это не работает, немного отличается. rowData было подходящим именем для выбора, это будут данные текущей строки. Но вы устанавливаете свойство для DataView в целом. Какова текущая строка для всего DataView? Ответ таков: нет ни одного, потому что вы не имеете дело с отдельным рядом.

...