使用导入映射时如何自定义 Rails 7 中的 Trix 工具栏?
我最近将一个应用程序升级到 Rails 7,并且我对所有 javascript 使用 importmap-rails。以前,该应用程序使用 Webpacker,除了自定义 Trix 工具栏以向 Trix 工具栏添加下划线按钮之外,我还通过 importmaps 使用所有 javascript。为了使用 Webpacker 做到这一点,我使用了这个 JS 文件来自定义 Trix 工具栏:
trix_extensions.js
:
var Trix = require("trix")
Trix.config.textAttributes.underline = {
tagName: 'u'
}
const {lang} = Trix.config;
Trix.config.toolbar = {
getDefaultHTML() { return `
<div class="trix-button-row">
<span class="trix-button-group trix-button-group--text-tools" data-trix-button-group="text-tools">
<button type="button" class="trix-button trix-button--icon trix-button--icon-bold" data-trix-attribute="bold" data-trix-key="b" title="${lang.bold}" tabindex="-1">#{lang.bold}</button>
<button type="button" class="trix-button trix-button--icon trix-button--icon-italic" data-trix-attribute="italic" data-trix-key="i" title="${lang.italic}" tabindex="-1">${lang.italic}</button>
<button type="button" class="trix-button trix-button--icon trix-button--icon-strike" data-trix-attribute="strike" title="${lang.strike}" tabindex="-1">${lang.strike}</button>
<button type="button" class="trix-button trix-button--icon trix-button--icon-underline" data-trix-attribute="underline" data-trix-key="u" title="underline" tabindex="-1">${lang.underline}</button>
<button type="button" class="trix-button trix-button--icon trix-button--icon-link" data-trix-attribute="href" data-trix-action="link" data-trix-key="k" title="${lang.link}" tabindex="-1">${lang.link}</button>
</span>
<span class="trix-button-group trix-button-group--block-tools" data-trix-button-group="block-tools">
<button type="button" class="trix-button trix-button--icon trix-button--icon-heading-1" data-trix-attribute="heading1" title="${lang.heading1}" tabindex="-1">${lang.heading1}</button>
<button type="button" class="trix-button trix-button--icon trix-button--icon-quote" data-trix-attribute="quote" title="${lang.quote}" tabindex="-1">${lang.quote}</button>
<button type="button" class="trix-button trix-button--icon trix-button--icon-bullet-list" data-trix-attribute="bullet" title="${lang.bullets}" tabindex="-1">${lang.bullets}</button>
<button type="button" class="trix-button trix-button--icon trix-button--icon-number-list" data-trix-attribute="number" title="${lang.numbers}" tabindex="-1">${lang.numbers}</button>
<button type="button" class="trix-button trix-button--icon trix-button--icon-decrease-nesting-level" data-trix-action="decreaseNestingLevel" title="${lang.outdent}" tabindex="-1">${lang.outdent}</button>
<button type="button" class="trix-button trix-button--icon trix-button--icon-increase-nesting-level" data-trix-action="increaseNestingLevel" title="${lang.indent}" tabindex="-1">${lang.indent}</button>
</span>
<span class="trix-button-group trix-button-group--file-tools" data-trix-button-group="file-tools">
<button type="button" class="trix-button trix-button--icon trix-button--icon-attach" data-trix-action="attachFiles" title="${lang.attachFiles}" tabindex="-1">${lang.attachFiles}</button>
</span>
<span class="trix-button-group-spacer"></span>
<span class="trix-button-group trix-button-group--history-tools" data-trix-button-group="history-tools">
<button type="button" class="trix-button trix-button--icon trix-button--icon-undo" data-trix-action="undo" data-trix-key="z" title="${lang.undo}" tabindex="-1">${lang.undo}</button>
<button type="button" class="trix-button trix-button--icon trix-button--icon-redo" data-trix-action="redo" data-trix-key="shift+z" title="${lang.redo}" tabindex="-1">${lang.redo}</button>
</span>
</div>
<div class="trix-dialogs" data-trix-dialogs>
<div class="trix-dialog trix-dialog--link" data-trix-dialog="href" data-trix-dialog-attribute="href">
<div class="trix-dialog__link-fields">
<input type="url" name="href" class="trix-input trix-input--dialog" placeholder="${lang.urlPlaceholder}" aria-label="${lang.url}" required data-trix-input>
<div class="trix-button-group">
<input type="button" class="trix-button trix-button--dialog" value="${lang.link}" data-trix-method="setAttribute">
<input type="button" class="trix-button trix-button--dialog" value="${lang.unlink}" data-trix-method="removeAttribute">
</div>
</div>
</div>
</div>
`; }
};
但是我无法通过 importmaps 让这个 JS 工作。我尝试将 var Trix = require("trix")
切换为 import Trix from "trix";
以及将所有这些直接放入 HTML 中的标签中header 只是为了看看我是否能让它正常工作,但没有运气。
如何使用 importmap-rails 自定义 Rails 7 中的 Trix 工具栏?我还需要添加import "@rails/actiontext"
吗?
仅供参考 - 我正在 config/importmap.rb
中加载所有其他普通的非刺激 JS,然后使用类似这样的行将其导入 javascript/application.js
中>import "custom/trix_extensions.js" 等。
我的 trix_extensions.js
似乎通过我的导入映射正确加载,因为我收到 ReferenceError: Can't find多变的:在控制台中需要
。所以它告诉我问题在于我如何将 Trix 导入到我的 trix_extensions.js
文件中。此外,默认的 Trix 工具栏已正确加载并按预期工作。我只是没有看到我的定制。
所以问题似乎是如何在使用 importmaps 导入 Trix 时扩展它。
这是我的完整 config/importmap.rb 文件:
pin "@rails/activestorage", to: "activestorage.esm.js"
pin "application", preload: true
pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true
pin "@hotwired/stimulus", to: "https://ga.jspm.io/npm:@hotwired/[email protected]/dist/stimulus.js"
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true
pin_all_from "app/javascript/controllers", under: "controllers"
pin "alpinejs", to: "https://unpkg.com/[email protected]/dist/module.esm.js", preload: true
pin "@rails/ujs", to: "https://ga.jspm.io/npm:@rails/[email protected]/lib/assets/compiled/rails-ujs.js"
pin "@rails/request.js", to: "https://ga.jspm.io/npm:@rails/[email protected]/src/index.js", preload: true
pin "trix", to: "https://ga.jspm.io/npm:[email protected]/dist/trix.js"
pin "@rails/actiontext", to: "actiontext.js"
pin "sortablejs", to: "https://ga.jspm.io/npm:[email protected]/modular/sortable.esm.js"
pin "tailwindcss-stimulus-components", to: "https://ga.jspm.io/npm:[email protected]/dist/tailwindcss-stimulus-components.modern.js"
pin_all_from "app/javascript/custom", under: "custom"
以及我的 javascript/application.js 文件:
// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
import "@hotwired/turbo-rails"
import "@rails/activestorage"
import "controllers"
import "trix"
import "@rails/actiontext"
import "custom/direct_uploads"
import "custom/stripe_payments"
import "custom/table_sort"
import "custom/trix_extensions"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
仅供参考 - 我在我的
javascript/custom/trix_extensions.js
文件中使用了以下内容:// 从此修改:https://github.com/ParamagicDev/exploring-trix/blob/part01-changing-the-default-toolbar/main.js
我认为我错过的关键行是
document.addEventListener('trix-initialize', updateToolbars, { Once: true });
感谢 https://github.com/ParamagicDev/ 在这里分享:
https://github.com/ParamagicDev/exploring-trix/blob/part01-changing-the-default-toolbar/main.js
FYI - I got this working with the following in my
javascript/custom/trix_extensions.js
file:// Modified from this: https://github.com/ParamagicDev/exploring-trix/blob/part01-changing-the-default-toolbar/main.js
I think the key line I was missing was
document.addEventListener('trix-initialize', updateToolbars, { once: true });
Thanks to https://github.com/ParamagicDev/ for sharing this here:
https://github.com/ParamagicDev/exploring-trix/blob/part01-changing-the-default-toolbar/main.js