Tinymce 随机不在 meteorjs 中呈现

Tinymce randomly not rendered in meteorjs

我来这里是因为我对 Meteorjs + Tinymce 有一个大问题。希望你能帮助我...

让我解释一下我的情况。

我有一个我自己制作的多步骤表单的基本模板。 在这个基本模板中,有一个动态模板函数,它呈现每个步骤(点击下一步按钮,它呈现下一步。)

有我的不同模板:

AdminTrainingsInsertForm(基础)

  1. 培训师(第一步)
  2. 训练(第二步)
  3. 基本(第 3 步)
  4. 实用(第 4 步)<- 正是在这一步中,我在 3 个文本区域上渲染了 tinymce
  5. 时间表(第 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".