在AJAX Forms加载的textareas中使用“更新的WMD编辑器”

时间:2009-05-03 23:08:05

标签: ajax symfony1 wmd wmd-editor

我们正在尝试在Symfony项目中使用Stackoverflow优秀的WMD / Markdown编辑器(http://blog.stackoverflow.com/2009/01/updated-wmd-editor/http://github.com/derobins/wmd/tree/master)。

这对textareas非常有效,不涉及任何AJAX。但是当我们必须先包含wmd.js,然后再进行用户交互(即“点击链接”)时,通过AJAX加载了textarea,我们完全无法使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) {

加载页面时(即在加载textarea之前)。

Symfony的AJAX Loader似乎eval()标签之间的所有内容。我们尝试将整个脚本直接包含在这些标记之间,我们试图逃避这个和那个,但是没有成功,会出现不同的错误。

此时我们认为我们必须在正常页面中包含脚本,在AJAX调用之后我们必须手动启动WMD - 我们必须调用哪些函数?我们完全偏离轨道并且需要使用不同的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

[{3}}上的wmd的drobins fork也解决了AJAX问题。

答案 1 :(得分:1)

您可以使用我的版本。只需将构造函数调用,配置值和对start()方法的调用放在回调函数中,该函数处理从AJAX请求中获得的结果。 My version of mooWMD.

答案 2 :(得分:0)

我有同样的问题,一旦我的textarea被异步添加到页面,我就会初始化WMD。

继承我的代码:

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

}