2016-06-05 2 views
2

У меня есть выбор, что OnChange вызвать Js Funtion, чтобы показать/скрыть редактор TinyMCE:выполняют функцию JS после TinyMCE загружен

<select id="mySelect" onChange="myFuntion()"> 
<option value="1">Yes</option> 
<option value="0">No</option> 

Тогда у меня есть текстовое поле с TinyMCE (загруженную на странице загрузки).

<textarea class="mce" id="myTextarea"></textarea> 
<script src="tinymce.js></script> // file with global tinymce.init({ ... }); 

Функция JS, как:

<script>  
function myFuntion(){ 
    if($('#mySelect').val() == '1') { tinymce.get('myTextarea').show(); } 
    else { tinymce.get('myTextarea').hide(); } 
} 
$(document).ready(function() { myFuntion(); }); // show/hide tinymce based on how the mySelect setting is on page load 

Все прекрасно работает за исключением "$ (документ) .ready (функция() {myFuntion();});", что бросок ошибка "Uncaught TypeError: Невозможно прочитать свойство 'show' of null", я думаю, что его так как tinymce еще не загружен.

Существует способ изменить "документ готовую функцию" с "когда TinyMCE загружается> выполнить MYFUNCTION()"

PS: Я использую TinyMCE 4, tinymce.init() находится на внешние файлы и использовать на других страницах, поэтому я предпочитаю не редактировать этот файл

EDIT: мой фактический обходной путь заключается в использовании: SetTimeout (функция() {туРипсЫоп();}, 1500); , но если есть обратный вызов или похожий, например, $ (документ) .on («TinyMCE:» инициализация) будет большим

ответ

0

Согласно документации, вы должны объявить функцию обратного вызова следующим образом:

function myCustomOnInit() { 
     alert("We are ready to rumble!!"); 
} 

tinyMCE.init({ 
     ... 
     oninit : myCustomOnInit 
}); 

Это ручка, которую они предлагают, чтобы гарантировать, что tinyMCE готов.
Что вы говорите здесь:

I use tinymce 4, the tinymce.init() is on a external files and used on other page, so i prefer not to edit this file

Не делает много смысла для меня.
Согласно документации:

oninit: This option enables you to specify a function to be executed when all editor instances have finished their initialization. This is much like the onload event of an HTML page.

Делает совершенно ясно, что это так, вы должны пойти.
Не имеет значения, где объявляется tinymce.init(), просто убедитесь, что вы предоставили функцию, которую хотите выполнить.

+0

спасибо, уже попробуйте с «oninit», проблема в том, что tinimce.js (с tinymce.init() в нем) используется многими страницами, поэтому, если я добавлю «oninit: myfuntion» все остальные страницы вызывают ошибку ... нет другого пути? – ipel

+0

@ipel Если вы говорите много страниц, я предполагаю, что разные страницы отображаются с сервера (а не одна страница с разными маршрутами). Если это так, у вас будет oninit() на каждой странице, где вы используете tinymce. Это нормально, что вы не можете включить скрипт на одну страницу и получить доступ к нему от другого, так как вся страница сбрасывается при доступе к другой странице. – Trace

2

В TinyMCE 4 пытаются сделать с Promise

tinymce.init({ 
//some settings 
}).then(function(editors) { 
    //what to do after editors init 
}); 
2

Чтобы добавить к ответу, что Ким Gysen написал ... Вы всегда можете использовать JavaScript, чтобы изменить/расширить стандартные инициализации на странице на странице основе.

Например, начните с вашей стандартной конфигурации:

baseConfig = { 
    selector: 'textarea' 
    .... 
} 

... так как это только простой объект JavaScript вы можете вводить дополнительные свойства/методы в этот объект, прежде чем использовать его, чтобы инициализировать TinyMCE.

Например:

customConfig = { 
    setup: function (editor) { 
     editor.on('init', function() { 
      //Do what you need to do once TinyMCE is initialized 
     }); 
    } 
} 

Затем вы можете "внедрить" customConfig в baseConfig. Самый простой способ заключается в использовании метода расширения JQuery в:

$.extend(baseConfig, customConfig); 

... это будет принимать все методы и свойства от customConfig и добавить их в baseConfig. После того, как вы закончите вы можете загрузить TinyMCE с помощью недавно обновленный baseConfig:

tinymce.init(baseConfig); 

Этот общий метод позволяет создать «стандартную» конфигурацию со всеми базовыми возможностями, которые необходимо при введении дополнительных параметров конфигурации на странице, страница.

Итак, теперь вы можете запускать функцию onInit в TinyMCE, когда вам это нужно, без изменения конфигурации ядра, используемой в другом месте.

Смежные вопросы