Форум платформы » Веб-редактор elRTE и файловый менеджер elFinder » Форум для разработчиков » Внешний callback сохранения
Внешний callback сохранения
| Автор | Сообщение |
|---|---|
|
Артём Курапов
Регистрация: 25.11.2009
Кол-во сообщений: 13
|
Добрый день, помоему достаточно очевидная проблема - сейчас сохранение работает только с помощью save-кнопки в toolbarе, а мне надо вызывать submit формы самому.. и когда я это делаю, то содержание как таковое в POSTе отсутствует. Надо либо сделать в options дополнительно onSubmit callback, либо предоставить у элемента менять настройки редактора как-то. |
|
dio
Регистрация: 04.05.2006
Кол-во сообщений: 105
|
Странно, редактор вешает обработчик на сабмит родительской формы. Форму отправляете с кнопки сабмит или из js?
|
|
Артём Курапов
Регистрация: 25.11.2009
Кол-во сообщений: 13
|
Видимо исправил сам - строка 1313 там вызывается сохранение исходника при субмите. Видимо из-за того что у меня всё подгружается аяксом + используется ajaxForm, надо было инициализацию редактора выше поднять, иначе обновление содержание происходит после субмита
|
|
Артём Курапов
Регистрация: 25.11.2009
Кол-во сообщений: 13
|
Теперь возникла другая проблема. Если у меня стоит сохранение содержание только на субмите формы, то как мне сделать сохранение отдельно? Тоесть мне надо как в ЖЖ периодически сохранять черновик, но как получить чистое содержание редактора? что-нибудь типа $("#some_editor").elrte.source()..
|
|
dio
Регистрация: 04.05.2006
Кол-во сообщений: 105
|
Ппробуйте var rte = new elRTE(document.getElementById("some_id"), options); потом var src = rte.val(); При создании редактора через jquery плагин, так может не получиться |
|
savamura
Регистрация: 12.01.2010
Кол-во сообщений: 10
|
У меня вот тоже возникла проблема с сохранением большой формы, которая сабмитится через jQuery.formPlugin.ajaxSubmit(), который вызывается в jQuery.validate. Так получается, что тот обработчик, который вешается на form.submit внутри elRte вызывается уже после validate.beforeSubmit(). Очень не хватает возможности получения elRTE объекта или какого-то jQuery API, чтобы можно было дёрнуть updateSource(). Пришлось написать костыль, который вешает на контейнер редактора ссылку на объект ELRTE и через него уже апдейтить источник. И ещё было бы здорово сохранять id dom-узла, к которому вешается редактор. |
|
savamura
Регистрация: 12.01.2010
Кол-во сообщений: 10
|
В догонку я подумал, что было бы здорово как-то хакнуть порядок привязывания хендлеров к form.submit(), чтобы обновление связанного текстового поля всегда было первым в цепочке хендлеров, или придумать иной способ поддержания связанной textarea в актуальном состоянии, но то что есть сейчас, не вполне удачно. К сожалению, jQuery не позволяет управлять порядком хендлеров.
|
|
dio
Регистрация: 04.05.2006
Кол-во сообщений: 105
|
К релизу сделаем
|
|
dio
Регистрация: 04.05.2006
Кол-во сообщений: 105
|
Насчет хэндлеров событий - надо крепко думать Обновлять textarea на каждый чих - тоже не выход
|
|
savamura
Регистрация: 12.01.2010
Кол-во сообщений: 10
|
В общем, костыль получился такой: Вместо this.editor.parents("form").eq(0).s ubmit ... что 2295 строке elrtefinder.full.js примерно следующий код:
|
|
savamura
Регистрация: 12.01.2010
Кол-во сообщений: 10
|
В общем, меня не пускает парсер но идея получить события формы и поменять очерёдность сработала var formEvents = $.data( form.get(0), "events"); ----- var form = this.editor.parents("form").eq(0); var formEvents = $.data( form.get(0), "events"); var formSubmitHandlers = new Array(); if (typeof formEvents["submit"] != "undefined") { for (var ev in formEvents["submit"]) formSubmitHandlers.push(formEvents["submit"][ev]); form.unbind("submit"); } form.submit(function(e) { if (self.source.css("display") == "none") { self.updateSource(); } self.toolbar.find(":hidden").remove(); }); for (var t=0; t < formSubmitHandlers.length; t++) form.submit(formSubmitHandlers[t]); |
|
savamura
Регистрация: 12.01.2010
Кол-во сообщений: 10
|
Я извиняюсь за бардак но парсер не пускает одинарную кавычку. |
|
dio
Регистрация: 04.05.2006
Кол-во сообщений: 105
|
Спасибо за решение! Обязательно использую его.
|
|
savamura
Регистрация: 12.01.2010
Кол-во сообщений: 10
|
Сюрприз. Это не работает в Хроме. Он запоминает guid у функций и возвращает их наместо в очередь вызовов Помимо этого, если нет совсем обработчиков, то будет ошибка в строке if (typeof formEvents["submit"] != "undefined") надо if (typeof formEvents != "undefined" && typeof formEvents["submit"] != "undefined") Насчёт хрома. Можно сделать финт ушами и переопределить guid, тогда заработает. Но чует моё сердце, что это говнокод. Нужен способ внешнего дёргания за функцию обновления связанного поля. Перед тем, как переопределить обработчики (последний цикл в предыдущем посте), надо поменять у них guid // chrome hack if (formSubmitHandlers.length > 0 && typeof formSubmitHandlers[0].guid != "undefined") { var max = 0; for (var ev in formEvents["submit"]) if (max < formEvents["submit"][ev].guid) max = formEvents["submit"][ev].guid; for (var t=0; t < formSubmitHandlers.length; t++) formSubmitHandlers[t].guid += max; } тогда и в Хроме заработает. |
|
dio
Регистрация: 04.05.2006
Кол-во сообщений: 105
|
а добавить событие в начало очереди с unshift не прокатит? Вообще пока не копал elRTE дальше, как дойду - буду думать на эту тему, и твои изыскания пригодяться
|
|
Roth
Регистрация: 01.12.2009
Кол-во сообщений: 18
|
Я эту проблему решил по другому var content1 = new elRTE(document.getElementById('content_1'), opts);а потом: //при вызове делает обновление var t2=content2.val(); //при вызове делает обновление var news_form = $("#news_n").serialize();posted_data.php
|
|
dio
Регистрация: 04.05.2006
Кол-во сообщений: 105
|
Ну, всегда найдется еще один способ
|
|
savamura
Регистрация: 12.01.2010
Кол-во сообщений: 10
|
Цитата: dio 26.01.2010 12:49 а добавить событие в начало очереди с unshift не прокатит? Нет, хром зачем-то запоминает guid в самом объекте функции и возвращает его на место :/ |
|
dio
Регистрация: 04.05.2006
Кол-во сообщений: 105
|
Хром, вообще сцуко, особенный. Это я уже успел заметить
|
|
Артём Курапов
Регистрация: 25.11.2009
Кол-во сообщений: 13
|
На заметку будующим разработчикам — возник ещё один косвенный баг если использовать .val() - в таком случае перезаписывается содержание редактора кода. Тоесть если у меня каждые 30 секунд сохраняется черновик, а я в это время сижу меняю html, то он пропадёт на лету. Вместо этого лучше использовать напрямую свойство source[0].value
|
|
dio
Регистрация: 04.05.2006
Кол-во сообщений: 105
|
к плагину добавлен метод updateSource. Использовать можно таг: $(selector).elrte(options); потом когда нужно $(selector).elrte("updateSource"). Чуть позже выложу nightbuild
|

Обновлять textarea на каждый чих - тоже не выход