TinyMCE 和 Vuejs 作为组件
TinyMCE and Vuejs as a component
我正在尝试为 TinyMCE 制作一个 Vue 组件,但我遇到了一些我无法解决的问题!有谁能够帮助我? 或者建议更好的走路方式?
有我的组件
import Vue from 'vue'
import _ from 'lodash'
export
default {
props: {
model: {
default () {
return null
}
},
showLeadInfo: {
default () {
return false
}
}
},
data() {
return {
id: 'editor_' + _.random(10000, 99999)
}
},
watch: {
model() {
if (this.model == null)
tinyMCE.activeEditor.setContent('');
}
},
ready() {
var vm = this;
tinyMCE.baseURL = "/vendor/tinymce/";
tinymce.init({
selector: "#" + vm.id,
theme: "modern",
height: 200,
plugins: [
"advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker",
"searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking",
"save table contextmenu directionality emoticons template paste textcolor"
],
toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | print preview media fullpage | forecolor backcolor emoticons",
style_formats: [{
title: 'Bold text',
inline: 'b'
}, {
title: 'Red text',
inline: 'span',
styles: {
color: '#ff0000'
}
}, {
title: 'Red header',
block: 'h1',
styles: {
color: '#ff0000'
}
}, {
title: 'Example 1',
inline: 'span',
classes: 'example1'
}, {
title: 'Example 2',
inline: 'span',
classes: 'example2'
}, {
title: 'Table styles'
}, {
title: 'Table row 1',
selector: 'tr',
classes: 'tablerow1'
}],
setup: function(editor) {
editor.on('keyup', function(e) {
vm.model = editor.getContent();
});
}
});
},
events: {
updateTinyValue(value) {
tinyMCE.activeEditor.setContent(value);
}
}
}
HTML
<textarea :id="id" v-model="model" v-el:editor></textarea>
PS: 它由 Vueify 组成,因此有一个模板和一个包装该代码的脚本标签。
我最大的问题是,当我尝试实例化多个编辑器时,由于这段代码,我无法清除正确的组件tinyMCE.activeEditor.setContent(value)
...我试过tinyMCE.get('#' + this.id).setContent()
,但它不起作用!
有人知道吗?
另一件事是关于 ja TinyMCE 插件...我正在使用 Bower + Gulp 来管理我的资产!我想把所有的插件都放在我的 gulpfile 上(我正在使用 Laravel 5)...现在 TinyMCE 插件一个一个地加载,这需要很多时间!
提前致谢!
您可以使用 getInstanceById
:
而不是 activeEditor
tinyMCE.getInstanceById(this.id).setContent(value);
查看可能是老版本tinyMCE的文档,也可以试试:
tinymce.editors[this.id].setContent(value);
另请查看此答案,它使用 Vue 指令自动管理:。这使您可以简单地使用 <textarea v-editor :body="body"></textarea>
制作一个 tinyMCE 编辑器。您需要对其进行调整,但是指令是进行此操作的方法。
您可以将vue-easy-tinymce作为组件使用,这是一个简单而强大的包,可以方便地在Vue.js中使用tinymce 项目。
或者简单地说:
var yourComponent = {
props: {
id: {type: String, default: 'editor'},
value: {default: ''}
},
data: function () {
return {
objTinymce: null
}
},
template: '<textarea :id="id" :value="value"></textarea>',
mounted: function () {
var component = this;
var initialOptions = {
target: this.$el,
init_instance_callback: function (editor) {
editor.on('Change KeyUp Undo Redo', function (e) {
component.value = editor.getContent();
});
component.objTinymce = editor;
}
};
tinymce.init(initialOptions);
},
watch: {
value: function (newValue, oldValue) {
var component = this;
if (component.value !== this.objTinymce.getContent())
this.objTinymce.setContent(component.value);
else
component.$emit('input', newValue);
}
}
};
我正在尝试为 TinyMCE 制作一个 Vue 组件,但我遇到了一些我无法解决的问题!有谁能够帮助我? 或者建议更好的走路方式?
有我的组件
import Vue from 'vue'
import _ from 'lodash'
export
default {
props: {
model: {
default () {
return null
}
},
showLeadInfo: {
default () {
return false
}
}
},
data() {
return {
id: 'editor_' + _.random(10000, 99999)
}
},
watch: {
model() {
if (this.model == null)
tinyMCE.activeEditor.setContent('');
}
},
ready() {
var vm = this;
tinyMCE.baseURL = "/vendor/tinymce/";
tinymce.init({
selector: "#" + vm.id,
theme: "modern",
height: 200,
plugins: [
"advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker",
"searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking",
"save table contextmenu directionality emoticons template paste textcolor"
],
toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | print preview media fullpage | forecolor backcolor emoticons",
style_formats: [{
title: 'Bold text',
inline: 'b'
}, {
title: 'Red text',
inline: 'span',
styles: {
color: '#ff0000'
}
}, {
title: 'Red header',
block: 'h1',
styles: {
color: '#ff0000'
}
}, {
title: 'Example 1',
inline: 'span',
classes: 'example1'
}, {
title: 'Example 2',
inline: 'span',
classes: 'example2'
}, {
title: 'Table styles'
}, {
title: 'Table row 1',
selector: 'tr',
classes: 'tablerow1'
}],
setup: function(editor) {
editor.on('keyup', function(e) {
vm.model = editor.getContent();
});
}
});
},
events: {
updateTinyValue(value) {
tinyMCE.activeEditor.setContent(value);
}
}
}
HTML
<textarea :id="id" v-model="model" v-el:editor></textarea>
PS: 它由 Vueify 组成,因此有一个模板和一个包装该代码的脚本标签。
我最大的问题是,当我尝试实例化多个编辑器时,由于这段代码,我无法清除正确的组件tinyMCE.activeEditor.setContent(value)
...我试过tinyMCE.get('#' + this.id).setContent()
,但它不起作用!
有人知道吗?
另一件事是关于 ja TinyMCE 插件...我正在使用 Bower + Gulp 来管理我的资产!我想把所有的插件都放在我的 gulpfile 上(我正在使用 Laravel 5)...现在 TinyMCE 插件一个一个地加载,这需要很多时间!
提前致谢!
您可以使用 getInstanceById
:
activeEditor
tinyMCE.getInstanceById(this.id).setContent(value);
查看可能是老版本tinyMCE的文档,也可以试试:
tinymce.editors[this.id].setContent(value);
另请查看此答案,它使用 Vue 指令自动管理:<textarea v-editor :body="body"></textarea>
制作一个 tinyMCE 编辑器。您需要对其进行调整,但是指令是进行此操作的方法。
您可以将vue-easy-tinymce作为组件使用,这是一个简单而强大的包,可以方便地在Vue.js中使用tinymce 项目。
或者简单地说:
var yourComponent = {
props: {
id: {type: String, default: 'editor'},
value: {default: ''}
},
data: function () {
return {
objTinymce: null
}
},
template: '<textarea :id="id" :value="value"></textarea>',
mounted: function () {
var component = this;
var initialOptions = {
target: this.$el,
init_instance_callback: function (editor) {
editor.on('Change KeyUp Undo Redo', function (e) {
component.value = editor.getContent();
});
component.objTinymce = editor;
}
};
tinymce.init(initialOptions);
},
watch: {
value: function (newValue, oldValue) {
var component = this;
if (component.value !== this.objTinymce.getContent())
this.objTinymce.setContent(component.value);
else
component.$emit('input', newValue);
}
}
};