【问题标题】:Rails how do I pass a rails variable to CKEditor config?Rails 如何将 rails 变量传递给 CKEditor 配置?
【发布时间】:2018-10-21 14:07:42
【问题描述】:

我的情况是,某些具有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 变量。

【问题讨论】:

标签: ruby-on-rails ckeditor


【解决方案1】:

这是因为资产 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 ===。)

见:

【讨论】:

  • 我的问题是我无法从后端获取 current_user 变量。
  • 你可以按照同样的方式传递它。只需创建一个属性data-ckeditor-current-user-id。问题是当你拥有id 时,你将如何处理它?更好的选择是通过传递数据属性在视图中设置 CKEditor 选项。因此,您的视图中会出现类似 &lt;div class="ckeditor" data-ckeditor-font="&lt;%= current_user.has_role?(font_user) %&gt;"&gt;&lt;/div&gt; 的内容。
  • 谢谢,我现在明白你的意思了。我会尝试这种方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多