lia*_*dee 5 javascript tinymce web-component polymer
我正在尝试构建一个用于教学内容的自定义 TinyMCE 编辑器,该编辑器将允许将某些块包装为“活动”。一个内容块中将有多个活动,因此它们将具有 ID 作为主键等。
我的挑战是实现一个允许这样做的插件——理想情况下,我会使用短代码,但它们很容易出错。我正在考虑使用通过 Polymer 呈现的自定义 HTML 标签——这可以做到吗?
大约4个小时后我就完全解决了。
TinyMCE 编辑器需要初始化并支持自定义元素,如下所示:
{
...
extended_valid_elements : 'module-activity',
custom_elements : 'module-activity',
init_instance_callback: function(editor) {
registerCustomWebComponents(tinymce.activeEditor.dom.doc);
},
...
}
Run Code Online (Sandbox Code Playgroud)
看起来像registerCustomWebComponents
:
function registerCustomWebComponents(doc) {
doc.registerElement('module-activity', ModuleActivityHTMLElement);
}
Run Code Online (Sandbox Code Playgroud)
我最终定义了自定义 HTML 元素,然后定义了一个 React 组件,而不是将 HTMl 构建为字符串。
class ModuleActivity extends React.Component {
constructor(props) {
super(props);
this.openActivityEdit = this.openActivityEdit.bind(this);
}
openActivityEdit() {
}
render() {
return <div>
<h3>Module Activity</h3>
<button onClick={this.openActivityEdit}>Edit</button>
<div dangerouslySetInnerHTML={{__html: this.props.contentHtml }} />
</div>;
}
}
class ModuleActivityHTMLElement extends HTMLElement {
attachedCallback() {
let self = this;
var mountPoint = document.createElement('div');
this.createShadowRoot().appendChild(mountPoint);
ReactDOM.render(<ModuleActivity contentHtml={self.innerHTML}/>, mountPoint);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1877 次 |
最近记录: |