Dojo 1.7 Ajax 内容和 AMD 要求
Posted
技术标签:
【中文标题】Dojo 1.7 Ajax 内容和 AMD 要求【英文标题】:Dojo 1.7 Ajax Content and AMD Require 【发布时间】:2012-07-04 22:17:28 【问题描述】:我在 Dojo 1.7 中,异步加载。
我有一个内容窗格,我通过 ajax 填充内容。我想在此内容中以声明方式使用上传器 - 如何正确要求上传器?
假设这是我用来生成将设置为内容窗格的内容的服务器页面:
<script>
require(["dojox/form/uploader/FileList",
"dojox/form/uploader/plugins/Flash"]);
</script>
<center>
<input type="file" multiple="true" data-dojo-type="dojox.form.Uploader"
data-dojo-props='
label:"Foo My Bar!",
url:"/tests/UploadFile.php",
uploadOnSelect:"true"'/>
</center>
<br>
<div id="files" data-dojo-type="dojox.form.uploader.FileList"
data-dojo-props='uploaderId:"uploader"'></div>
但这不起作用:找不到小部件类。我知道这是因为加载器处于异步模式,并且显然解析器正在尝试在 require 调用完成之前呈现小部件。
所以,问题是,如何正确地做到这一点?如果我将 require 调用放在应用程序的主页中,一切正常(包括在主页中以声明方式设置的小部件)。
【问题讨论】:
【参考方案1】:似乎 'dojox/form/Uploader' 没有加载...是必需的吗?
您可以在任何时候调用 dojo.parser.parse 解析内容。 如果你想从你的代码中执行第一次解析, 在 dojo 配置上设置“parseOnLoad : false”,然后调用“dojo.parser.parse(dojo.body());”。
【讨论】:
【参考方案2】:您需要在页面上以声明方式引用您所引用的所有小部件模块:
require(["dojo/parser","dojox/form/Uploader","dojox/form/uploader/FileList"],
function(parser)
parser.parse()
);
【讨论】:
【参考方案3】:您是否尝试过在 dijit 中使用 dojox/layout/ContentPane 而不是 ContentPane? dojox 中的 ContentPane 类型派生自 dijit 中的类型,允许代码在动态内容中运行。在解析内容中的小部件时,它似乎还加载了必要的小部件引用。
【讨论】:
以上是关于Dojo 1.7 Ajax 内容和 AMD 要求的主要内容,如果未能解决你的问题,请参考以下文章
Dojo 1.7 如何在 require() 之外使用 dojo 组件
Dojo.js AMD 加载程序 - 类型错误:无法将未定义转换为对象
是否已经存在支持 Dojo AMD、NodeJS 要求和浏览器窗口的代码。 [something] 用于 Javascript 微库