我正在尝试做一个简单的任务。此任务是将包含dijit.Form
的HTML加载到ContentPane
。在加载此HTML之前,我不知道我需要哪些dijit,但加载的HTML将包含适用的require
来加载它们。
因此,为了能够从加载的HTML执行脚本,我使用dojox.layout.ContentPane
。但是,当我将parseOnLoad
设置为true
时,解析会在执行之前进行,因此首次加载内容时dijits不可用。此外,当我尝试使用onDownloadEnd
回调时,运行此回调时,require
的dijits仍未加载。
我唯一能想到的就是使用setTimeout
将解析推迟到执行这些脚本的时间。我不喜欢这个解决方案,因为它可能会不时失败,这会使应用程序不那么负责任。
那么我应该如何执行解析,以便在运行加载的HTML的require
语句后立即执行?
答案 0 :(得分:1)
只有您拥有的选项是设置dojoConfig.async = false或在代码中的require语句中设置。
出于这个原因,未加载模块; require()不会阻塞 - 当它仍在下载模块时 - 解析器运行。
请参阅http://jsfiddle.net/zA9cJ/1/了解此
的示例require(["dojox/layout/ContentPane", "dojo/domReady!"], function(pane) {
var p = new pane({ parseOnLoad: true, executeScripts: true }, 'container');
var content = '<script type="text/javascript">'+
'require('+
//////////////////////////
'{async:false},'+ ////////
//////////////////////////
'["dijit/form/Button"]);'+
'<'+'/script>'+
'<div data-dojo-type="dijit.form.Button">Button</div>';
p.set("content", content);
});