elixir - 在 phoenix LiveView 中使用外部库
问题描述
我正在尝试将 WYSIWYG-Editor tinymce 与包含 textarea 字段的 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 就不再工作,并且只剩下一个基本的 textarea 字段,在该字段上执行预期的验证。
有没有办法将此外部库加载到 LiveView 中?我试图通过一个钩子调用一个包含 tinymce.init 步骤的函数
let Hooks = {}
Hooks.LoadIt = {
mounted() {
tinyinit(tinymce)
}
}
但这不起作用。有谁知道这个问题的解决方案?
解决方案
您可以将钩子连接到元素上。像这样的东西:
<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
推荐阅读
- go - 有没有办法提取一个 protobuf oneof int 值?
- sql - 获取具有两个不同日期范围的数据列
- azure-functions - 如何使用 functionApp 托管标识更新 KeyVault 中的机密
- javascript - 如何使用我创建的代码创建新的“最近搜索”按钮?我仍然在开发工具中收到错误消息,不知道该怎么办
- python - 有没有办法为从 Google Colab 下载的文件指定位置?
- types - 使用 nrwl NX 在 Angular 服务中无法识别 @Types/activex-dao
- python - 在修复python中的一些元素时生成一个总和为1的随机浮点数组
- apache-camel - 在 Camel 中过滤 Swagger Rest 端点
- android - 从片段调用时活动无法关闭
- sapui5 - SAP UI5 - onscrollstart 和 onscrollstop 事件处理