Используйте «Обновленный редактор ОМУ» в текстовых областях, загруженных формами AJAX - PullRequest
4 голосов
/ 04 мая 2009

Мы пытаемся использовать превосходный редактор Stackoverflow WMD / Markdown (http://blog.stackoverflow.com/2009/01/updated-wmd-editor/, http://github.com/derobins/wmd/tree/master) в проекте Symfony.

Отлично работает на текстовых областях без участия AJAX. Но когда нам нужно сначала включить wmd.js, а затем, при взаимодействии с пользователем (то есть «нажать на ссылку»), загрузить текстовое поле через AJAX, мы совершенно не можем заставить работать WMD, 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-загрузчик Symfony, кажется, проверяет () все между тегами. Мы пытались включить весь сценарий непосредственно между этими тегами, мы пытались избежать этого и того, но безуспешно с появлением различных ошибок.

На данный момент мы считаем, что мы должны включить скрипт в обычную страницу, и после вызова AJAX мы должны инициировать ОМУ вручную - какие функции мы должны вызывать? Мы совершенно не в курсе и должны использовать другой подход?

Спасибо!

Ответы [ 3 ]

1 голос
/ 12 июля 2009

Вы можете использовать мою версию. Просто поместите вызов конструктора, значения конфигурации и вызов метода start () в функцию обратного вызова, которая обрабатывает результаты, полученные из запроса AJAX. Моя версия mooWMD.

1 голос
/ 06 июля 2009

ветвь drobins из wmd на github также решает проблемы AJAX.

0 голосов
/ 25 сентября 2009

У меня была такая же проблема, и я инициализирую ОМУ, как только моя текстовая область была добавлена ​​на страницу асинхронно.

Вот мой код:

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});

}
...