Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Использование tinyMCE (https://javascript.ru/forum/dom-window/52369-ispolzovanie-tinymce.html)

Veterinar 16.12.2014 12:44

Использование tinyMCE
 
При первичной инициализации редактора tinyMCE данные в редактируемое поле textarea передаются, но при каждом новом вызове (поле то же самое, но значение в нём меняется) в редакторе поле всегда пустое...

Как быть? - не инициализировать tinyMCE? - как тогда его вызывать?

Спасибо за совет.

Инициализацию редактора произвожу при открытии диалогового окна:

$('#edttxt').val(newText); // присвоение нового редактируемого текста
tinymce.init({
	mode : "exact",
	elements : "edttxt",
	force_br_newlines : true, // замена <p> на <br>
	inline: false,
	plugins: [
	"advlist autolink lists link image charmap print preview anchor",
	"searchreplace visualblocks code fullscreen",
	"insertdatetime media table contextmenu paste"
	],
	toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
	});

Veterinar 16.12.2014 16:28

Rise, ну, а как назвать открываемое в слое?

$("#editor").dialog({
	autoOpen: false,
	modal: true,
	show: "blind",
	hide: "explode",
	title: 'Редактирование',
	resizable: true,
	width: 530,
	height: 350
});

Veterinar 16.12.2014 22:30

Rise, тогда лучше прямо на сайте поглядеть: http://ledagregator.ru/lesson.html
Имя / пароль: 5 / 5
В левой части у каждого текста иконка с карандшиком открывает редактирование

danik.js 22.12.2014 17:14

При закрытии окна надо вызывать editor.destroy(). В данном случае editor - это объект, возвращаемый функцией init(). Хотя могу ошибаться в деталях. Но суть такова. Потому что редактор не может привязаться к одному элементу несколько раз, не отвязавшись от него.

Veterinar 22.12.2014 19:44

danik.js, спасибо, однако не помогло.
Правда закрытие окна добавил в опцию закрытия, может быть поэтому так и не работает при повторном вызове:
$("#editor").dialog({
		autoOpen: false,
		modal: true,
		show: "blind",
		hide: "explode",
		title: 'Редактирование',
		resizable: true,
		width: 530,
		height: 350,
		close: function(event, ui) {$("#editor").dialog("destroy")}
	});

danik.js 23.12.2014 02:22

какой в жопу dialog destroy? Я сказал editor.destroy!!!

var editor = tinymce.init();
...
editor.destroy();

danik.js 23.12.2014 02:23

Кстати, если элемент при закрытии диалога не уничножается, то зачем повторно инициализировать редактор?

Veterinar 23.12.2014 04:44

danik.js, ну не ругайся! :agree:
Я ж тут вовсе а#уею :blink:

danik.js 23.12.2014 07:09

Цитата:

Сообщение от Veterinar
поле то же самое, но значение в нём меняется

Ну tinyMCE же не следит за полем и его value. Ты сам должен когда тебе нужно вызывать editor.setValue(textarea.value). Или setData - я не помню как у tinymce - смотри документацию.

Veterinar 23.12.2014 14:20

danik.js, спасибо ещё раз!

Но чего-то я такого наворотил, что кердык полнейший.
В документации сказано передавать значения в tinyMCE с помощью
tinyMCE.activeEditor.setContent("тут нужная херня");

Так и передаю, а оно нихера не передаётся! :-E

Но это ещё полпиздеца, даже четверть его! Самый писец в том, что при указании в опциях инициализации
tinymce.init({
mode : "exact", 
//theme : "advanced",
elements : "edttxt",
force_br_newlines : true, // замена <p> на <br>
inline: false,
language : 'ru',
plugins: [
"advlist autolink lists link image charmap print preview anchor",
"searchreplace visualblocks code fullscreen",
"insertdatetime media table contextmenu paste"
],
toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
});

Если ставить theme : "advanced" эта сука вообще не открывается. Но это не всё!
В окне диалога, где этот редактор, сука, должен открыться, в его поле ввода/редактирования текста вообще не попадает фокус. Так, как будто он имеет статус "readonly".

danik.js 23.12.2014 17:28

Цитата:

Сообщение от Veterinar
В окне диалога, где этот редактор, сука, должен открыться, в его поле ввода/редактирования текста вообще не попадает фокус.

Встречал подобную фигню. Возникает при манипуляциях с DOM'ом. Попробуй поставь setTimeout нулевой - должно помочь.
Цитата:

Сообщение от Veterinar
tinyMCE.activeEditor

Не знаю что это такой за activeEditor. Лучше храни ссылку на свой editor - так будет точно работать.

Veterinar 23.12.2014 17:31

danik.js, а куда, вернее когда сделать вызов setTimeout?

danik.js 23.12.2014 17:39

init делать по таймауту.

Veterinar 23.12.2014 20:41

danik.js, всё-таки это глюк в tinyMCE - стоило избавиться от установки слоя в "dialog" и всё заработало.

Однако, в tinyMCE есть опция tinyMCEPopup (http://www.tinymce.com/wiki.php/API3:class.tinyMCEPopup) но с которой я совсем не возьму в толк как работать.

andypop 09.03.2016 13:57

$(this).click(function() {
                    vs = $(this).html();
                    $("#otzyv").html(vs);

                    tinymce.init({
                        selector: '#otzyv',
....
})

$("#example").on("dialogclose", function(event, ui) {
                                tinymce.execCommand("mceRemoveEditor", true, 'otzyv');
                        });


Часовой пояс GMT +3, время: 12:07.