Javascript dojo.xd.js无法识别dojox.data.CsvStore
当我使用导入时,例如Javascript dojo.xd.js无法识别dojox.data.CsvStore,javascript,cdn,dojo,Javascript,Cdn,Dojo,当我使用导入时,例如 <script type="text/javascript" src="http://o.aolcdn.com/dojo/1.2.3/dojo/dojo.xd.js" djConfig="parseOnLoad:true, isDebug: true"></script> 对于诸如 var stateStore = new dojox.data.CsvStore({url: "dojo-passcsv.php", label: "nam
<script type="text/javascript" src="http://o.aolcdn.com/dojo/1.2.3/dojo/dojo.xd.js"
djConfig="parseOnLoad:true, isDebug: true"></script>
对于诸如
var stateStore = new dojox.data.CsvStore({url: "dojo-passcsv.php", label: "name"});
但是,如果我使用从本地安装的dojo导入,例如
<script type="text/javascript" src="dojo-release-1.2.3/dojo/dojo.js"
djConfig="parseOnLoad:true, isDebug: true"></script>
您是否在dojo.addOnLoad()中运行该代码?例如:
dojo.addOnLoad(function(){
dojo.require("dojox.data.CsvStore");
var stateStore = new dojox.data.CsvStore({url: "dojo-passcsv.php", label: "name"});
});
另外,你在使用Firefox3吗?如果是这样,请尝试将您的
块放在
部分的末尾,就在关闭
标记之前。(我知道这不是标准做法,但它与Firefox相关,应该在3.0.6版中修复。)
除此之外,您的代码似乎还不错,这种奇怪的差异通常归结为加载dojo模块的时间问题。对您的更新做出反应: 我强烈认为您应该尝试使用
dojo.addOnLoad()
。您的
的最后两个
部分将合并为:
<script>
dojo.addOnLoad(function(){
dojo.require("dojox.data.CsvStore");
dojo.require("dijit.Tree");
dojo.require("dojo.parser"); /* I don't think you really need this line */
var stateStore = new dojox.data.CsvStore({url: "states.csv", label: "name"});
});
</script>
dojo.addOnLoad(函数(){
require(“dojox.data.CsvStore”);
dojo.require(“dijit.Tree”);
require(“dojo.parser”);/*我认为您并不真正需要这一行*/
var stateStore=new dojox.data.CsvStore({url:“states.csv”,label:“name”});
});
原始代码的问题在于,您无法保证在即将创建stateStore
实例时,构造函数dojox.data.CsvStore
已被读取。这就是dojo.addOnLoad()
的作用,它保证在执行作为addOnLoad()的参数传递的抽象函数之前加载其余的javascript
因为这是一个时间问题,您自己的原始代码有时可能会工作,其他代码可能不会工作:这取决于下载速度和浏览器将各种javascript位组合在一起的顺序。这就是为什么使用dojo的远程库有时可能会得到与使用您自己的dojo库本地副本不同的结果
也就是说,如果您使用的是Firefox3(早于3.0.6),那么请记住我所说的已知bug。在这种情况下,您可能希望将该
块放在关闭
标记之前。。。(该选项也适用于其他浏览器。)是正确的,这是关键,但它应该在dojo.requires之后,而不是之前。此外,必须从自动djConfig.parseOnLoad(在addOnLoad之前触发)切换到手动启动解析器。当您仍然将该商店URL更改为指向某个合理的位置(在您的网站上)时,这将起作用:
<script>
dojo.require("dojox.data.CsvStore");
dojo.require("dijit.Tree");
dojo.require("dojo.parser");
dojo.addOnLoad(function(){
stateStore = new dojox.data.CsvStore({url: "states.csv", label: "name"});
dojo.parser.parse();
});
</script>
require(“dojox.data.CsvStore”);
dojo.require(“dijit.Tree”);
require(“dojo.parser”);
dojo.addOnLoad(函数(){
stateStore=new dojox.data.CsvStore({url:“states.csv”,标签:“name”});
parser.parse();
});
注意:还有一个非常类似的例子:。谢谢你的回答。我已经粘贴了问题中“有效”的完整代码。我没有在dojo.addOnLoad()中使用var stateStore声明,但它似乎工作正常。然而,当我输入CDN引用时,它就中断了。你的问题是:你要实例化一个尚未加载的类。它在本地加载文件时起作用,因为它们是在javascript执行之前加载的。(当然,本地加载文件比使用CDN更快)。无论如何,使用dojo.addOnLoad是XD加载的唯一方法。
<script>
dojo.addOnLoad(function(){
dojo.require("dojox.data.CsvStore");
dojo.require("dijit.Tree");
dojo.require("dojo.parser"); /* I don't think you really need this line */
var stateStore = new dojox.data.CsvStore({url: "states.csv", label: "name"});
});
</script>
<script>
dojo.require("dojox.data.CsvStore");
dojo.require("dijit.Tree");
dojo.require("dojo.parser");
dojo.addOnLoad(function(){
stateStore = new dojox.data.CsvStore({url: "states.csv", label: "name"});
dojo.parser.parse();
});
</script>