我们正在尝试在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 - 我们必须调用哪些函数?我们完全偏离轨道并且需要使用不同的方法吗?
谢谢!
答案 0 :(得分:1)
答案 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});
}