我在富文本编辑器中遇到过类似的问题,并且contenteditable
由于模板如何更新 DOM,您不希望它成为模板的一部分。
为此,您可以使用非 Lit DOM 添加一个新元素,然后将其添加到Lit 管理的 DOM:
class TrumbowygEditor
extends HTMLElement {
constructor() {
super();
const shadow = this.attachShadow({mode: 'open'});
const div = document.createElement('div');
shadow.appendChild(div);
const style = document.createElement('style');
// Add CSS required
shadow.appendChild(style);
$(div).trumbowyg(); //init
}
}
customElements.define('trumbowyg-editor', TrumbowygEditor);
由于这是在自定义元素的阴影 DOM 中运行,因此 Lit 不会触及它,您可以执行以下操作:
html`
<div>Lit managed DOM</div>
<trumbowyg-editor></trumbowyg-editor>`;
但是,您必须实现属性和事件TrumbowygEditor
以添加您想要传递到嵌套 jQuery 组件或从嵌套 jQuery 组件获取的所有内容。
import
如果您可以获得 jQuery/Trumbowyg 的模块版本(或您的构建工具支持它),您可以添加脚本,或者您可以将<script>
标签添加到您的组件,在 中添加后备加载 DOM 内容constructor
,然后在<script>
调用的加载事件上$(div).trumbowyg()
初始化组件。
虽然更混乱和更多的工作我推荐后者,因为这两个组件都很大并且(由于 jQuery 建立在现在已经 15 年的假设之上)需要同步加载(<script async
或者<script defer
不工作)。尤其是在较慢的连接上,Lit 会在 jQuery/Trumbowyg 加载之前很久就准备好,所以你希望<trumbowyg-editor>
在发生这种情况时看起来不错(显示微调器、在适当的空间中布局等)。