Rails 如何将 rails 变量传递给 CKEditor 配置?
Rails how do I pass a rails variable to CKEditor config?
我的情况是,某些具有 font_user
角色的用户可以使用字体,但其他人不能。
在 ckeditor/config.js
中,我无法从 Rails 中获取任何变量。我该如何实现?
我试过这样的方法:
- 修改
config.js
为config.js.erb
.
添加以下代码。
<% 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 ===
。)
参见:
- Working with JavaScript in Rails: Unobtrusive JavaScript
- The Asset Pipeline 了解有关资产管道的更多信息。
- Using data attributes 了解有关数据属性的更多信息。
我的情况是,某些具有 font_user
角色的用户可以使用字体,但其他人不能。
在 ckeditor/config.js
中,我无法从 Rails 中获取任何变量。我该如何实现?
我试过这样的方法:
- 修改
config.js
为config.js.erb
. 添加以下代码。
<% 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 ===
。)
参见:
- Working with JavaScript in Rails: Unobtrusive JavaScript
- The Asset Pipeline 了解有关资产管道的更多信息。
- Using data attributes 了解有关数据属性的更多信息。