【问题标题】:Using external libraries in phoenix LiveView在 phoenix LiveView 中使用外部库
【发布时间】:2021-04-19 00:41:59
【问题描述】:

我正在尝试将 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)
  }
}

但这不起作用。有谁知道这个问题的解决方案吗?

【问题讨论】:

    标签: elixir tinymce phoenix phoenix-live-view


    【解决方案1】:

    您可以将钩子附加到元素上。像这样的:

    <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

    【讨论】:

    • 其实我做对了,但在别处犯了一个小错误......
    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多