Rails 如何将 rails 变量传递给 CKEditor 配置?

Rails how do I pass a rails variable to CKEditor config?

我的情况是,某些具有 font_user 角色的用户可以使用字体,但其他人不能。

ckeditor/config.js 中,我无法从 Rails 中获取任何变量。我该如何实现?

我试过这样的方法:

  1. 修改config.jsconfig.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变量。

这是因为资产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 会 return undefined,而 undefined == 'true' 仍然是 false。 (请记住,CoffeeScript == 等于 JavaScript ===。)

参见: