Вызов ввода с привязкой с сервера.
Я успешно реализовал возможность привязки Shiny, но функция определена в ui.R, и любые вызовы с server.R этого нового ввода приводят к ошибке функции not found.
Я прохожу session
на server.R (не уверен, если это имеет значение), и я также создал global.R, в котором просто есть функция (не уверен, что мне нужно что-то еще, потому что это даже не позволяет мне вызывать функцию в ui.R).
Как я могу вызвать пользовательскую блестящую функцию ввода с server.R (особенно в renderUI
)?
Пример кода здесь: (вызов sortList
отлично работает с ui.R, но не с server.R) https://gist.github.com/jpd527/9687359
1 ответ
Решение
Вот исправленный Gist: https://gist.github.com/trestletech/9691459
Здесь есть два основных изменения:
- Я переместил
sortListInput
функция кglobal.R
, Вы упоминаете, что пытались это сделать, но это сработало, чтобы раскрыть эту функцию обоимserver
а такжеUI
, - Следующая проблема заключалась в том, что вы только инициализировали
sortListInput
при создании страницы. Ты имел$( ".sortableList" ).sortable(); $( ".sortableList" ).disableSelection();
в синглтоне<script>
в вашем<head>
, но это будет выполняться только один раз при создании страницы. Так динамически созданsortableLists
то, что создается позже, никогда не будет инициализировано. Поэтому я добавил<script>
кусок к вашемуsortListInput
это будет запускать этот код каждый раз, когда вы генерируете новый. Я не знаю более чистого способа сделать это прямо сейчас, но, возможно, он существует / будет существовать...
Несколько вещей, о которых нужно знать:
- Так как вы сейчас инициализируете все
sortListInputs
каждый раз, когда он создается динамически, вы должны быть уверены, что этот код инициализации идемпотентен, то есть вы не нарушите существующие при запуске этого кода. - Я заметил, что вы загружаете свою собственную версию jQuery и некоторые другие библиотеки jQuery. Будьте осторожны с этим, поскольку у Shiny также есть версия jQuery, от которой она зависит. Вы должны быть уверены, что нет никаких конфликтов.