Используйте "Обновленный редактор ОМУ" в текстовых областях, загруженных формами AJAX
Мы пытаемся использовать отличный редактор Stackru для WMD / Markdown ( http://blog.stackru.com/2009/01/updated-wmd-editor/, http://github.com/derobins/wmd/tree/master). на проекте Symfony.
Это отлично работает на текстовых без участия AJAX. Но когда мы должны сначала включить wmd.js, а затем при взаимодействии с пользователем (то есть, "нажать на ссылку") загрузить текстовое поле через AJAX, мы совершенно не можем заставить работать ОМУ, Firebug дает нам
elem is null
addEvent()()wmd.js (Linie 110)
setupEvents()()wmd.js (Linie 1790)
init()()wmd.js (Linie 1970)
previewManager()()wmd.js (Linie 1987)
loadListener()()wmd.js (Linie 1763)
[Break on this error] if (elem.attachEvent) {
при загрузке страницы (т.е. до загрузки текстовой области).
AJAX Loader Symfony, кажется, eval() все между тегами. Мы пытались включить весь скрипт непосредственно между этими тегами, мы пытались избежать того и другого, но безуспешно, когда возникали разные ошибки.
На данный момент мы думаем, что должны включить скрипт в обычную страницу, и после вызова AJAX мы должны инициировать ОМУ вручную - какие функции мы должны вызывать? Мы полностью не в курсе и должны использовать другой подход?
Спасибо!
3 ответа
Вы можете использовать мою версию. Просто поместите вызов конструктора, значения конфигурации и вызов метода start() в функцию обратного вызова, которая обрабатывает результаты, полученные из запроса AJAX. Моя версия mooWMD.
У меня была такая же проблема, и я инициализирую ОМУ, как только моя текстовая область была добавлена на страницу асинхронно.
Вот мой код:
function loadTextEditor()
{
var instances = [];
if (!Attacklab || !Attacklab.wmd) {
alert("WMD hasn't finished loading!");
return;
}
/***** build the preview manager *****/
var textArea = document.getElementById('postcontent');
var previewPane = document.getElementById('postPreview');
var panes = {input:textArea, preview:previewPane, output:null};
var previewManager = new Attacklab.wmd.previewManager(panes);
/***** build the editor and tell it to refresh the preview after commands *****/
var editor = new Attacklab.wmd.editor(textArea,previewManager.refresh);
// save everything so we can destroy it all later
instances.push({ta:textarea, div:previewDiv, ed:editor, pm:previewManager});
}