我正在尝试将所见即所得编辑器与包含文本区字段的phoenix LiveView集成。在使用LiveView之前,我将它作为node_module库导入到app.js文件中
import tinymce from '../node_modules/tinymce/tinymce',然后通过
tinymce.init({
selector: 'textarea',
plugins: ...
})为了能够验证模板中的表单输入,我将其转换为我通过其提供服务的LiveView
let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content");
let liveSocket = new LiveSocket("/live", Socket, {params: {_csrf_token: csrfToken}, hooks: Hooks});
//// Connect if there are any LiveViews on the page
liveSocket.connect();这是惯例。然而,一旦LiveSocket被挂载,tinymce-plugin就不再起作用了,仍然只剩下一个基本的文本区域字段,用于执行预期的验证。
有没有办法把这个外部库加载到LiveView中?我尝试通过钩子调用包含tinymce.init步骤的函数
let Hooks = {}
Hooks.LoadIt = {
mounted() {
tinyinit(tinymce)
}
}但这是行不通的。有没有人知道这个问题的解决方案?
发布于 2021-04-19 00:41:59
你可以把你的钩子挂在元素上。如下所示:
<textarea ... phx-hook="LoadIt" id="your-unique-id"></textarea>并在mounted中初始化它:
Hooks.LoadIt = {
mounted() {
tinymce.init({
selector: this.el, # <- attribute referencing the bound DOM node.
plugins: ...
})
}
}了解有关客户端挂钩的更多信息:https://hexdocs.pm/phoenix_live_view/js-interop.html#client-hooks
https://stackoverflow.com/questions/67141284
复制相似问题