TinyMCE Ajax.Как мне найти редактор во время обратного вызова?(TinyMCE.get не работает) - PullRequest
1 голос
/ 30 июля 2010

Я делаю что-то, что я считаю довольно стандартным:

В приложении Ajax я динамически создаю редактор,

a) динамически добавляя текстовую область в DOM.Идентификатор текстовой области хранится в переменной с именем editField

b) Я обертываю TinyMCE так:

tinyMCE.execCommand("mceAddControl", false, jq(editField).attr('id'));

c) Я запускаю ajax-вызов на сервер, чтобы получитьданные, которые нужно отредактировать, и в обратном вызове я хочу поместить их в редактор.

tinyMCE.get( jq(editField).attr('id') ).setContent(data);

Однако, когда я получаю обратный вызов из вызова ajax,

tinyMCE.get( jq(editField).attr('id') ) 

возвращение неопределенного.

Редактор, похоже, работает.Я могу использовать его, я даже могу получить к нему доступ через tinyMCE.activeEditor (что происходит, когда я пытаюсь сохранить).Но я не могу получить его через get на этом этапе.

ТАК тоже:

a) tinyMCE не полностью создается, когда обратный вызов возвращает

b) что-то ещепроисходит.

Есть идеи, как мне это проверить?И что люди делают, чтобы решить эту проблему?

Ответы [ 4 ]

2 голосов
/ 11 августа 2010

OK.Я решил это.Но не очень элегантно.

Моя проблема на самом деле заключалась в в том, что редактор TinyMCE не был полностью создан во время возврата из вызова ajax.

Что я закончилбыло сделано следующее:

1) в обратном вызове ajax:

a) начало создания экземпляра редактора с помощью команды addControl

b) заполнение глобальной переменной (MY_GLOBAL) с помощьюзначение, которое возвращается с сервера

2), когда я вызываю tinyMCE.init (), я передаю ему обратный вызов для события OnInit.Это занимает 2 шага:

a) определить функцию "setup", которая добавляет обработчик обратного вызова OnInit к tinyMCE.Обратный вызов проверяет глобальную переменную (MY_GLOBAL в этом упрощении) и вставляет ее значение в экземпляр tinyMCE, теперь в "this".

  var setup = function(editor) {
    editor.onInit.add( function(editor, evt) {
      if (MY_GLOBAL) {
        this.setContent(MY_GLOBAL);
      }
    });
  };

b) передает эту настройку в tinyMCE.init

var config = {
  blah : blah,
  setup : setup
};
tinyMCE.init(config);

Теперь вызов ajax по-прежнему возвращает свое значение до создания экземпляра tinyMCE, поэтому он заполняет MY_GLOBAL.Затем, когда редактор наконец появляется, он запускает обратный вызов OnInit, который находит значение, сохраненное в MY_GLOBAL, и помещает его в редактор.

2 голосов
/ 15 февраля 2011

Нашел другое решение:

while(tinyMCE.get === 'undefined'){
        try {
            var ed = tinyMCE.get('your_mce_div');                   
        } catch (e) {
            // TODO: handle exception
        }
    }

у меня работает.Может быть, это кому-то пригодится.

1 голос
/ 07 апреля 2011

Вы пробовали tinyMCE.get ( 0 )?

0 голосов
/ 11 августа 2010

Почему бы вам не использовать editField вместо использования атрибута id узла jquery (?) (Также должен быть более производительным):

tinyMCE.execCommand("mceAddControl", false, editField);
tinyMCE.get( editField).setContent(data);
tinyMCE.get( editField);

Это работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...