2012-02-20 3 views
2

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

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

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

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

возможно?

ответ

2

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

+0

Вы имеете в виду, что я использую клиентскую сторону js для partialrefresh и стороне сервера js для установки viewcope? –

+1

будет ли событие XSP действительно работать, если панель не отображается? –

+0

Вот почему вам нужно обернуть его в визуализированное – stwissel

6

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

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

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

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

XSP.addOnLoad (function() { XSP.firePartial (null, "# {id: loadExpensiveComponentsEvent}") ; });

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

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

+0

интересное решение, спасибо –

0

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

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

Смежные вопросы