我正在使用 Trix 和 actiontext 创建一个所见即所得的 Rails 网站。我正在使用 Ruby 2.6.3 和 Rails 5.2.3。
问题:当我实现自定义版本(即添加红色文本)时,它在创建时完美运行(CRUD:新),在渲染时完美显示(CRUD:显示),但是当我尝试编辑文本时,我的自定义样式未显示在我的编辑器中的编辑视图中,并且 trix 添加到富文本的跨度不存在于客户端 DOM 中(CRUD:编辑)。
当它呈现在 Show 视图中时,我确认我的自定义版本保留在数据库中。
我想这是一个消毒问题。我之前在节目中遇到过这个问题,所以我将 style 属性添加到 Rails sanitizer allowed 属性中。
我的 trix 定制器看起来像这样添加一个红色选项:
// Attributes definition :
Trix.config.textAttributes.red = {
style: { color: "red" },
parser: function(element) {
return element.style.color === "red"
},
inheritable: true
}
addEventListener("trix-initialize", function(event) {
var buttonHTML = '<button type="button" data-trix-attribute="red">RED</button>'
event.target.toolbarElement.
querySelector(".trix-button-group.trix-button-group--text-tools").
insertAdjacentHTML("beforeend", buttonHTML)
})
在编辑器中使用时效果很好(工具栏中的选项在编辑和新视图中都可以使用)。
此外,为了在显示视图中正确显示,我添加了一个 Rails 初始化程序以允许样式属性:
Rails::Html::Sanitizer.white_list_sanitizer.allowed_attributes.add 'style'
问题是,当我进入编辑视图时,之前应用的红色样式不再呈现。请注意,我对创建和编辑视图使用完全相同的 _form.html.erb :
<%= simple_form_for([@owner, @article] , url: @action[:url], method: @action[:method]) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :title %>
<%= f.rich_text_area :content %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
如果您需要更多详细信息,请不要犹豫。非常感谢您的帮助 !