4

我们正在尝试使用 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) {

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

Symfony 的 AJAX 加载器似乎 eval() 标记之间的所有内容。我们尝试在这些标签之间直接包含整个脚本,我们尝试转义这个和那个,但没有成功,出现了不同的错误。

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

谢谢!

4

3 回答 3

1

github上 wmd 的 drobins fork 也在解决 AJAX 问题。

于 2009-07-06T10:52:21.657 回答
1

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

于 2009-07-12T15:47:45.180 回答
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});

}
于 2009-09-24T20:49:53.080 回答