Правила форума
Имя пользователя (login): Пароль: | Забыли пароль? | Регистрация

Внешний callback сохранения

Автор Сообщение
Внешний callback сохранения
Добрый день, помоему достаточно очевидная проблема -

сейчас сохранение работает только с помощью save-кнопки в toolbarе, а мне надо вызывать submit формы самому.. и когда я это делаю, то содержание как таковое в POSTе отсутствует.

Надо либо сделать в options дополнительно onSubmit callback, либо предоставить у элемента менять настройки редактора как-то.
Re: Внешний callback сохранения
Странно, редактор вешает обработчик на сабмит родительской формы. Форму отправляете с кнопки сабмит или из js?
Re: Внешний callback сохранения
Видимо исправил сам - строка 1313 там вызывается сохранение исходника при субмите. Видимо из-за того что у меня всё подгружается аяксом + используется ajaxForm, надо было инициализацию редактора выше поднять, иначе обновление содержание происходит после субмита
Re: Внешний callback сохранения
Теперь возникла другая проблема. Если у меня стоит сохранение содержание только на субмите формы, то как мне сделать сохранение отдельно? Тоесть мне надо как в ЖЖ периодически сохранять черновик, но как получить чистое содержание редактора? что-нибудь типа $("#some_editor").elrte.source()..
Re: Внешний callback сохранения
Ппробуйте
var rte = new elRTE(document.getElementById("some_id"), options);

потом
var src = rte.val();

При создании редактора через jquery плагин, так может не получиться
Re: Внешний callback сохранения
У меня вот тоже возникла проблема с сохранением большой формы, которая сабмитится через jQuery.formPlugin.ajaxSubmit(), который вызывается в jQuery.validate. Так получается, что тот обработчик, который вешается на form.submit внутри elRte вызывается уже после validate.beforeSubmit().

Очень не хватает возможности получения elRTE объекта или какого-то jQuery API, чтобы можно было дёрнуть updateSource(). Пришлось написать костыль, который вешает на контейнер редактора ссылку на объект ELRTE и через него уже апдейтить источник. И ещё было бы здорово сохранять id dom-узла, к которому вешается редактор.
Re: Внешний callback сохранения
В догонку я подумал, что было бы здорово как-то хакнуть порядок привязывания хендлеров к form.submit(), чтобы обновление связанного текстового поля всегда было первым в цепочке хендлеров, или придумать иной способ поддержания связанной textarea в актуальном состоянии, но то что есть сейчас, не вполне удачно. К сожалению, jQuery не позволяет управлять порядком хендлеров.
Re: Внешний callback сохранения
К релизу сделаем
Re: Внешний callback сохранения
Насчет хэндлеров событий - надо крепко думать Обновлять textarea на каждый чих - тоже не выход
Re: Внешний callback сохранения
В общем, костыль получился такой:

Вместо this.editor.parents("form").eq(0).s ubmit ... что 2295 строке elrtefinder.full.js

примерно следующий код:


Re: Внешний callback сохранения
В общем, меня не пускает парсер
но идея получить события формы и поменять очерёдность сработала
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]);
Re: Внешний callback сохранения
Я извиняюсь за бардак
но парсер не пускает одинарную кавычку.
Re: Внешний callback сохранения
Спасибо за решение! Обязательно использую его.
Re: Внешний callback сохранения
Сюрприз. Это не работает в Хроме. Он запоминает 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;
}

тогда и в Хроме заработает.
Re: Внешний callback сохранения
а добавить событие в начало очереди с unshift не прокатит?

Вообще пока не копал elRTE дальше, как дойду - буду думать на эту тему, и твои изыскания пригодяться
Re: Внешний callback сохранения
Я эту проблему решил по другому

var content1 = new elRTE(document.getElementById('content_1'), opts);
var content2 = new elRTE(document.getElementById('content_2'), opts);


а потом:

$("#sub_query").click(function () {
   var t1=content1.val();  
//при вызове делает обновление
   var t2=content2.val();  //при вызове делает обновление
   var news_form = $("#news_n").serialize();
   $.ajax({
     type: "POST",
     url: "posted_data.php",
     async: false,
     data: news_form,
     success: function(html){
       $('#dialog').html(html);
     }
});


posted_data.php

print_r($_POST);
Re: Внешний callback сохранения
Ну, всегда найдется еще один способ
Re: Внешний callback сохранения
Цитата: dio 26.01.2010 12:49
а добавить событие в начало очереди с unshift не прокатит?


Нет, хром зачем-то запоминает guid в самом объекте функции и возвращает его на место :/
Re: Внешний callback сохранения
Хром, вообще сцуко, особенный. Это я уже успел заметить
Re: Внешний callback сохранения
На заметку будующим разработчикам — возник ещё один косвенный баг если использовать .val() - в таком случае перезаписывается содержание редактора кода. Тоесть если у меня каждые 30 секунд сохраняется черновик, а я в это время сижу меняю html, то он пропадёт на лету. Вместо этого лучше использовать напрямую свойство source[0].value
Re: Внешний callback сохранения
к плагину добавлен метод updateSource. Использовать можно таг: $(selector).elrte(options); потом когда нужно $(selector).elrte("updateSource"). Чуть позже выложу nightbuild