Rails как передать переменную rails в конфигурацию CKEditor? - PullRequest
0 голосов
/ 11 мая 2018

Мой сценарий таков: некоторые пользователи с ролью font_user могут использовать шрифт, а другие - нет.

В ckeditor/config.js я не могу получить переменную из Rails. Как мне этого добиться?

Я пробовал что-то вроде этого:

  1. Изменить config.js на config.js.erb.
  2. Добавьте следующий код.

    <% current_user.has_role?(font_user) %>
      XXXXX
    <% else %>
      XXXX
    <% end %>
    

    и я добавил следующий метод в application_controller.rb:

    helper_method :current_user
    

    Но, похоже, config.js.erb не может получить переменную current_user.

1 Ответ

0 голосов
/ 11 мая 2018

Это потому, что актив JavaScript скомпилирован. Не каждый раз, когда представление отображается. Вы должны использовать беспрепятственный JavaScript. Например:

Посмотреть пример:

<div class="ckeditor" data-ckeditor-font="<%= current_user.has_role?(font_user) %>"></div>

В качестве альтернативы (не проверено):

Вы также можете использовать для этого # content_tag , хотя вам нужно проверить, как точно передавать атрибуты данных. Если я не ошибаюсь:

<% data = {
  'ckeditor-font': current_user.has_role?(font_user),
  # other data...
} %>

<%= content_tag :div, class: 'ckeditor', data: data %>

Но в настоящее время у меня нет настроек для проверки вышеуказанного кода. Так что вам придется проверить это самостоятельно.


Чем в вашем активе JavaScript (CoffeeScript):

initCkeditor = (element) ->
  fontUser = element.dataset.ckeditorFont == 'true'

  # further CKEditor initialization code...


document.addEventListener 'turbolinks:load', ->
  document
    .querySelectorAll '.ckeditor'
    .forEach initCkeditor

Если вы не установите атрибут data-ckeditor-font, код все еще работает. Так как element.dataset.ckeditorFont вернет undefined, а undefined == 'true' все еще false. (Имейте в виду, что CoffeeScript == равен JavaScript ===.)

См:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...