Tinymce 随机不在 meteorjs 中呈现
Tinymce randomly not rendered in meteorjs
我来这里是因为我对 Meteorjs + Tinymce 有一个大问题。希望你能帮助我...
让我解释一下我的情况。
我有一个我自己制作的多步骤表单的基本模板。
在这个基本模板中,有一个动态模板函数,它呈现每个步骤(点击下一步按钮,它呈现下一步。)
有我的不同模板:
AdminTrainingsInsertForm(基础)
- 培训师(第一步)
- 训练(第二步)
- 基本(第 3 步)
- 实用(第 4 步)<- 正是在这一步中,我在 3 个文本区域上渲染了 tinymce
- 时间表(第 5 步)
这是我渲染 tinymce 的代码,当我的实际步骤(模板)被渲染时:
tinymce.init({
selector: ".tinyted",
plugins: [
'autolink link'
],
toolbar: 'undo redo | bold italic underline | link bullist',
menubar: false,
statusbar: false,
inline: false,
skin_url: '/packages/teamon_tinymce/skins/lightgray',
setup : function(ed) {
ed.on('keydown', function(e) {
var body = tinymce.get($(this)[0].id).getBody(), text = tinymce.trim(body.innerText || body.textContent);
var ref = $('textarea[id='+$(this)[0].id+']');
text = text.replace(/(\r\n|\n|\r)/gm,"");
var len = text.length;
var maxChar = parseInt(ref.data('max'));
if ( (len) > maxChar ) { // prevent type because text length > max chars authorized
e.preventDefault();
e.stopPropagation();
return false;
}
// update count words div
if ($(this)[0].id == 'practical-description')
$('#description-count').html(len);
if ($(this)[0].id == 'practical-details')
$('#details-count').html(len);
if ($(this)[0].id == 'practical-agenda')
$('#agenda-count').html(len);
});
}
});
如您所见,tinymce 是在带有 class tinyted
的 textarea 上初始化的
问题是:
我正在我的多步骤表单中执行一个流程,渲染了 tinymce。我验证它,将所有数据插入我的 mongodb 并呈现所有这些不同数据的列表。
接下来,我正在用那个多步骤重做一个新流程,在第 4 步中,tinymce 没有呈现......所以这是一个 show-stopper 问题 :(
有人可以解决这个问题吗?感谢您对未来的回答!
如果您使用 loads/unloads TinyMCE 的 SPA 风格框架,您需要确保 init()
和 remove()
TinyMCE 在正确的时间。
当你想加载 TinyMCE 时,你使用 init()
,你第一次似乎正确地做了。
当你"leave"那一步你需要正确remove()
每个TinyMCE实例在框架删除相关DOM元素之前。
然后 return 到该步骤后,您可以再次使用 init()
。如果您在离开该步骤时没有 remove()
TinyMCE,它仍然有一个编辑器对象,但它现在指向 DOM 不再存在的对象,因此 TinyMCE 不会 "work".
我来这里是因为我对 Meteorjs + Tinymce 有一个大问题。希望你能帮助我...
让我解释一下我的情况。
我有一个我自己制作的多步骤表单的基本模板。 在这个基本模板中,有一个动态模板函数,它呈现每个步骤(点击下一步按钮,它呈现下一步。)
有我的不同模板:
AdminTrainingsInsertForm(基础)
- 培训师(第一步)
- 训练(第二步)
- 基本(第 3 步)
- 实用(第 4 步)<- 正是在这一步中,我在 3 个文本区域上渲染了 tinymce
- 时间表(第 5 步)
这是我渲染 tinymce 的代码,当我的实际步骤(模板)被渲染时:
tinymce.init({
selector: ".tinyted",
plugins: [
'autolink link'
],
toolbar: 'undo redo | bold italic underline | link bullist',
menubar: false,
statusbar: false,
inline: false,
skin_url: '/packages/teamon_tinymce/skins/lightgray',
setup : function(ed) {
ed.on('keydown', function(e) {
var body = tinymce.get($(this)[0].id).getBody(), text = tinymce.trim(body.innerText || body.textContent);
var ref = $('textarea[id='+$(this)[0].id+']');
text = text.replace(/(\r\n|\n|\r)/gm,"");
var len = text.length;
var maxChar = parseInt(ref.data('max'));
if ( (len) > maxChar ) { // prevent type because text length > max chars authorized
e.preventDefault();
e.stopPropagation();
return false;
}
// update count words div
if ($(this)[0].id == 'practical-description')
$('#description-count').html(len);
if ($(this)[0].id == 'practical-details')
$('#details-count').html(len);
if ($(this)[0].id == 'practical-agenda')
$('#agenda-count').html(len);
});
}
});
如您所见,tinymce 是在带有 class tinyted
的 textarea 上初始化的问题是: 我正在我的多步骤表单中执行一个流程,渲染了 tinymce。我验证它,将所有数据插入我的 mongodb 并呈现所有这些不同数据的列表。 接下来,我正在用那个多步骤重做一个新流程,在第 4 步中,tinymce 没有呈现......所以这是一个 show-stopper 问题 :(
有人可以解决这个问题吗?感谢您对未来的回答!
如果您使用 loads/unloads TinyMCE 的 SPA 风格框架,您需要确保 init()
和 remove()
TinyMCE 在正确的时间。
当你想加载 TinyMCE 时,你使用 init()
,你第一次似乎正确地做了。
当你"leave"那一步你需要正确remove()
每个TinyMCE实例在框架删除相关DOM元素之前。
然后 return 到该步骤后,您可以再次使用 init()
。如果您在离开该步骤时没有 remove()
TinyMCE,它仍然有一个编辑器对象,但它现在指向 DOM 不再存在的对象,因此 TinyMCE 不会 "work".