如何在解析的dojo ContentPane中使用dijit

时间:2012-09-22 17:02:53

标签: javascript ajax dojo js-amd

我正在尝试做一个简单的任务。此任务是将包含dijit.Form的HTML加载到ContentPane。在加载此HTML之前,我不知道我需要哪些dijit,但加载的HTML将包含适用的require来加载它们。

因此,为了能够从加载的HTML执行脚本,我使用dojox.layout.ContentPane。但是,当我将parseOnLoad设置为true时,解析会在执行之前进行,因此首次加载内容时dijits不可用。此外,当我尝试使用onDownloadEnd回调时,运行此回调时,require的dijits仍未加载。

我唯一能想到的就是使用setTimeout将解析推迟到执行这些脚本的时间。我不喜欢这个解决方案,因为它可能会不时失败,这会使应用程序不那么负责任。

那么我应该如何执行解析,以便在运行加载的HTML的require语句后立即执行?

1 个答案:

答案 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);
});​