Могу ли я отложить загрузку некоторых элементов управления на xPage после загрузки страницы - PullRequest
2 голосов
/ 20 февраля 2012

возможно ли отложить загрузку некоторых элементов управления на xpage?

В этом проблема: допустим, у вас есть элемент управления, который выполняет поиск в полном тексте и отображает результат в повторяющемся элементе управления. этот поиск ft может занять много времени и будет держать загрузку веб-страницы в состоянии ожидания, пока результат поиска не будет готов.

Я хочу, чтобы моя страница загружала большую часть данных изначально, и некоторые «трудоемкие» элементы управления должны быть загружены на страницу в качестве отдельного запроса после начальной загрузки.

таким образом, пользователь сразу увидит веб-страницу, но некоторые данные на странице будут загружены чуть позже, не удерживая веб-страницу в состоянии ожидания от сервера.

возможно

Ответы [ 3 ]

6 голосов
/ 20 февраля 2012

Недостатком использования рендеринга является то, что все привязки значений по-прежнему будут оцениваться, даже если соответствующая разметка не будет отправлена ​​на страницу. Итак, хитрость в том, чтобы убедиться, что компоненты даже не существуют, пока вы не захотите их.

Каждый компонент имеет метод getChildren (). Это возвращает изменяемый список компонентов, который имеет метод add (). Это позволяет добавлять компоненты на страницу на лету, либо во время загрузки страницы, либо позже во время события. В целях того, что вы пытаетесь сделать, вы можете отложить добавление «дорогих» компонентов до следующего события.

Создайте обработчик событий, присоединенный непосредственно к корню представления (), присвойте ему уникальный идентификатор (например, «loadExорогоComponentsEvent», установите частичный режим его обновления, установите идентификатор обновления для любого элемента div или панели, который будет содержать результаты поиска), и установите в качестве имени события произвольное событие (например, «loadExорогоComponents»). Это предотвращает запуск вашего события из-за фактического поведения пользователя. Установите код события в SSJS, который будет внедрять ваши компоненты.

Затем добавьте блок script (), чтобы вызвать событие после загрузки страницы:

XSP.addOnLoad (функция () { XSP.firePartial (null, "# {id: loadExорогоComponentsEvent}"); });

Ваша страница будет загружаться без компонентов результатов поиска. Как только страница полностью загрузится, она автоматически вызовет событие внедрения компонента.

Для получения инструкций о том, как кодировать событие внедрения, откройте файл Java, созданный на существующей странице, чтобы увидеть, какие компоненты необходимо внедрить и для чего их значения установить.

2 голосов
/ 20 февраля 2012

Вы можете упаковать их в панель и установить для их визуализированного состояния значение rendered = # {viewScope.pageFullyLoaded}. Тогда в событии onLoad есть XSP. Запрос частичного обновления, где вы устанавливаете viewScope.pageFullyLoaded = true Немного некрасиво, но выполнимо. Теперь вы можете заключить этот код в свой собственный элемент управления, чтобы у вас могли быть "lazyGrid", "lazyPanel" и т. Д.

0 голосов
/ 23 февраля 2012

Не уверен, почему я не думал об этом раньше. динамическое управление контентом в extlib фактически решает эту проблему. dcc может быть запущен onClientLoad как с использованием javascript, так и ssjs после загрузки страницы.

Одна проблема, с которой я сейчас сталкиваюсь, заключается в том, что я уже использую dcc на своем сайте, поэтому мне нужно поместить другой dcc в мой dcc. и это, кажется, немного глючит. Я сообщил об этом команде extlib на openNTF.

...