загрузка JavaScript из NotesDocument в событии onClientLoad

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

Я могу сохранить значение в viewScope, которое установлено в событии beforePageLoad на XPage.

Содержимое viewScope может быть следующим:

$(document).ready(function() { var table = $('#tablePager').DataTable({ "order": [ [1, "asc"] ], responsive: true, paging: false, /*stateSave: true,*/ colReorder: { reorderCallback: function() { console.log('callback'); } }, dom: 'Bfrtip', buttons: [ 'excelHtml5', 'print' ] }); //$('#tablePager_filter input').val('');});

Когда я пытаюсь оценить значение в событии onClientLoad, я получаю сообщение об ошибке:

<xp:eventHandler event="onClientLoad" submit="false">
        <xp:this.script><![CDATA[eval('#{javascript:viewScope.dataTable}')
]]></xp:this.script>

Uncaught SyntaxError: недопустимый или неожиданный токен

У кого-нибудь есть предложение, как преобразовать строку в функцию?


person Patrick Kwinten    schedule 20.05.2018    source источник
comment
Почему вы помещаете JS на стороне клиента в переменную viewScope на стороне сервера? Вместо этого вы можете использовать элемент управления xp:scriptBlock.   -  person Per Henrik Lausten    schedule 20.05.2018
comment
значение поля собирается в другом процессе, написанном на java. так что я просто сохранил в области видимости для удобства, я думаю.   -  person Patrick Kwinten    schedule 20.05.2018
comment
тем не менее, я попробовал вместо этого блок сценария, но получаю сообщение об ошибке: Uncaught SyntaxError: Illegal return statement. на данный момент я попробовал: ‹xp:scriptBlock id=scriptBlock1› ‹xp:this.value›‹![CDATA[return #{javascript:viewScope.get(dataTable)};]]›‹/xp:this.value› ‹ /xp:скриптБлок›   -  person Patrick Kwinten    schedule 20.05.2018
comment
в источнике я нахожу: ‹script type=text/javascript› return $(document).ready(function() { var table = $('#tablePager').DataTable({ \order\: [[1, \asc \] ], Response: true, paging: false, /*stateSave: true,*/ colReorder: { reorderCallback: function() { console.log('callback'); } }, dom: 'Bfrtip', buttons: [ 'copyHtml5', 'excelHtml5', 'print' ] }); //$('#tablePager_filter input').val('');});; ‹/скрипт›   -  person Patrick Kwinten    schedule 20.05.2018
comment
получил это работает сейчас. Спасибо, бро'!   -  person Patrick Kwinten    schedule 20.05.2018
comment
Превосходно. Я добавил свой комментарий в качестве ответа   -  person Per Henrik Lausten    schedule 21.05.2018


Ответы (1)


Почему вы помещаете JS на стороне клиента в переменную viewScope на стороне сервера? Вместо этого вы можете использовать элемент управления xp:scriptBlock.

person Per Henrik Lausten    schedule 21.05.2018