Javascript 如何在解析的DojoContentPane中使用dijit requires
我正在努力做一件简单的工作。此任务是将包含Javascript 如何在解析的DojoContentPane中使用dijit requires,javascript,ajax,dojo,js-amd,Javascript,Ajax,Dojo,Js Amd,我正在努力做一件简单的工作。此任务是将包含dijit.Form的HTML加载到ContentPane中。我不知道加载此HTML之前需要哪些DIJIT,但加载的HTML将包含加载它们所需的适用的require 因此,为了能够从加载的HTML执行脚本,我使用了dojox.layout.ContentPane。但是,当我将parseOnLoad设置为true时,解析在脚本执行之前进行,因此首次加载内容时dijit不可用。另外,当我尝试使用onDownloadEnd回调时,当运行此回调时,require
dijit.Form
的HTML加载到ContentPane
中。我不知道加载此HTML之前需要哪些DIJIT,但加载的HTML将包含加载它们所需的适用的require
因此,为了能够从加载的HTML执行脚本,我使用了dojox.layout.ContentPane
。但是,当我将parseOnLoad
设置为true
时,解析在脚本执行之前进行,因此首次加载内容时dijit不可用。另外,当我尝试使用onDownloadEnd
回调时,当运行此回调时,require
中的dijit仍然没有加载
我唯一能想到的就是使用setTimeout
将解析延迟到执行这些脚本的时间。但是,我不喜欢这个解决方案,因为它可能会不时失败,这会使应用程序不那么负责
因此,我应该如何执行解析,以便在运行加载的HTML中的
require
语句之后立即执行解析?唯一的选项是将dojoConfig.async设置为false或在代码中的require语句中设置
因此,模块未加载;require()不会阻塞—并且在它仍在下载模块时—解析器会运行
请参阅以获取此示例的运行示例
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);
});
require([“dojox/layout/ContentPane”,“dojo/domReady!”),函数(窗格){
var p=新窗格({parseOnLoad:true,executeScripts:true},'container');
变量内容=“”+
'需要'('+
//////////////////////////
“{async:false},”+////////
//////////////////////////
“[“dijit/form/Button”];”+
''+
“按钮”;
p、 设置(“内容”,内容);
});
您唯一的选择是设置dojoConfig.async=false或在代码中的require语句中设置
因此,模块未加载;require()不会阻塞—并且在它仍在下载模块时—解析器会运行
请参阅以获取此示例的运行示例
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);
});
require([“dojox/layout/ContentPane”,“dojo/domReady!”),函数(窗格){
var p=新窗格({parseOnLoad:true,executeScripts:true},'container');
变量内容=“”+
'需要'('+
//////////////////////////
“{async:false},”+////////
//////////////////////////
“[“dijit/form/Button”];”+
''+
“按钮”;
p、 设置(“内容”,内容);
});
我可以看到两种可能的解决方案-都使用dijit/layout/ContentPane:
dijit/form/form
的data config
属性中:
<form
data-dojo-type="dijit.form.Form"
data-config='"deps":["dijit/form/Form", "dijit/form/TextBox", "dijit/form/Button"]'>
<input data-dojo-type="dijit.form.TextBox" data-dojo-props="placeholder:'TextBox'">
<button data-dojo-type="dijit.form.Button">Button</button>
</form>
编辑:我刚想到编写一个自动程序需要(对于Dojo,我可以看到两种可能的解决方案-都是使用dijit/layout/ContentPane:
dijit/form/form
的data config
属性中:
<form
data-dojo-type="dijit.form.Form"
data-config='"deps":["dijit/form/Form", "dijit/form/TextBox", "dijit/form/Button"]'>
<input data-dojo-type="dijit.form.TextBox" data-dojo-props="placeholder:'TextBox'">
<button data-dojo-type="dijit.form.Button">Button</button>
</form>
编辑:我刚想到编写一个auto需要(对于Dojo+1用于重写OP的应用程序逻辑,对于放弃dojox.layout.ContentPane.executeScripts:)+1用于重写OP的应用程序逻辑,对于放弃dojox.layout.ContentPane.executeScripts:)