首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在phoenix LiveView中使用外部库

在phoenix LiveView中使用外部库
EN

Stack Overflow用户
提问于 2021-04-18 01:52:33
回答 1查看 249关注 0票数 3

我正在尝试将所见即所得编辑器与包含文本区字段的phoenix LiveView集成。在使用LiveView之前,我将它作为node_module库导入到app.js文件中

代码语言:javascript
复制
import tinymce from '../node_modules/tinymce/tinymce'

,然后通过

代码语言:javascript
复制
tinymce.init({
  selector: 'textarea',
  plugins: ...
})

为了能够验证模板中的表单输入,我将其转换为我通过其提供服务的LiveView

代码语言:javascript
复制
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步骤的函数

代码语言:javascript
复制
let Hooks = {}
Hooks.LoadIt = {
  mounted() {
    tinyinit(tinymce)
  }
}

但这是行不通的。有没有人知道这个问题的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 00:41:59

你可以把你的钩子挂在元素上。如下所示:

代码语言:javascript
复制
<textarea ... phx-hook="LoadIt" id="your-unique-id"></textarea>

并在mounted中初始化它:

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67141284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档