Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2015, 12:09   #1
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию tinymce inline ajax save

Помогите разобрать с сохранением в tinymce.
Я реализовал такую штуку, что если кликнуть по полю, то его можно редактировать, а по событию onBlur данные сохраняются. Для удобства я прикрутил монитор tinymce, но когда я брожу по пунктам tinymce, то срабатывает событие onblur и данные сохраняются.

Последний раз редактировалось Kostia; 20.01.2015 в 13:47.
Kostia вне форума Ответить с цитированием
Старый 20.01.2015, 12:18   #2
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Не понял.
Усё верно. Потеря фокуса текстового поля = сохранение.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 20.01.2015, 12:31   #3
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
Усё верно. Потеря фокуса текстового поля = сохранение.
Потеря происходит если я брожу по пунктам меню tinymce, мне этого не нужно! Т.е. если я в tinymce откроют окно source, то данные будут сохранены, хотя редактирование еще не окончено.

Редактирование и сохранение:
Код:
	$(".component .field").on("click", function () {
		$(this).attr("contenteditable", true);
		$(this).focus();
	}).on("blur", function () {
		$(this).attr("contenteditable", false);
		var data = {command: "Entity@Patch", id: $(this).data("id"), model: $(this).data("model")};
		data[$(this).data("model")] = {};
		data[$(this).data("model")][$(this).data("field")] = $(this).html();
		app.callCommand(data);
	});
Так происходит инициализация tinymce:
Код:
		tinymce.init({
			selector: ".component .field[data-type='editor']",
			inline: true,
			plugins: [
				"advlist autolink lists link image charmap print 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"
		});

Последний раз редактировалось Kostia; 20.01.2015 в 12:44.
Kostia вне форума Ответить с цитированием
Старый 20.01.2015, 13:03   #4
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Потеря происходит если я брожу по пунктам меню tinymce, мне этого не нужно! Т.е. если я в tinymce откроют окно source, то данные будут сохранены, хотя редактирование еще не окончено.
Это я понял, что не нужно. Для этого нужно использовать другую привязку и событие.
Если любое поле
Код:
$(".component .field")
теряет фокус то будет вызвано сохранение. Клик по меню и есть потеря фокуса.

Событие надо "вешать" на весь редактор, чтобы работало так как вам хочется. Причём другое, тк focus могут принимать только редактируемые поля.
Стрелок-охотник

Последний раз редактировалось mv28jam; 20.01.2015 в 13:07.
mv28jam вне форума Ответить с цитированием
Старый 20.01.2015, 13:23   #5
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
теряет фокус то будет вызвано сохранение. Клик по меню и есть потеря фокуса.

Событие надо "вешать" на весь редактор, чтобы работало так как вам хочется. Причём другое, тк focus могут принимать только редактируемые поля.
Да, я понимаю. Но в идеале мне достаточно события on close и on save для tinymce. Но для save есть зацепки:

Код:
tinymce.init({
    plugins: "save",
    toolbar: "save",
    save_enablewhendirty: true,
    save_onsavecallback: function() {console.log("Save");}
});
Хоть и не понятно, как получить редактируемые данные(редактируемый элемент) для сохранения.

А вот дела с on close обстоят плохо. Ничего найти не получается.

На некоторых ресурсах предлагают вешать на весь document событие click, и проверять куда он был совершен по редактируемому полю или по tinymce, но на странице может быть несколько tinymce(не инлайновые например), и всё сломается.
Kostia вне форума Ответить с цитированием
Старый 20.01.2015, 13:37   #6
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Есть событие beforeunload.

В целом я рекомендую чаще сохранять контент, экономить на траффике редактора - это что-то из разряда абстрактной оптимизации. Бишь оставить как есть либо не мучаться и делать кнопку. Либо хард - кнопка, либо софт - частое автосохранение, медиум решение оно как правило сочетает в себе недостатки обоих крайних.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 20.01.2015, 13:40   #7
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Всё оказалось значительно проще:

Код:
		tinymce.init({
			selector: ".component .field[data-type='editor']",
			inline: true,
			plugins: [
				"advlist autolink lists link image charmap print anchor",
				"searchreplace visualblocks code fullscreen",
				"insertdatetime media table contextmenu paste"
			],
			setup: function (editor) {
				editor.on('blur', function (e) {
					app.component.patch(e.target.targetElm);
				});
			},
			toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
		});
Нужно лучше документацию читать )
Kostia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Tinymce+textarea b2soft Помощь студентам 0 02.07.2013 20:24
inline c gcc O3 медленее чем без inline LynXzp Общие вопросы C/C++ 4 27.12.2012 20:54
Фиксация tinyMCE Rost93 Свободное общение 0 22.04.2012 05:58
Не отображается редактор TinyMCE Rikus PHP 0 17.03.2012 03:12
TinyMCE editable Anoobis JavaScript, Ajax 2 21.11.2011 13:12