我一直试图使用dojo.require(If)
与本地变量动态加载页面上的模块基于条件。dojo.requireIf不允许本地变量
// note: dojo v1.4 djConfig = { debugAtAllCosts: true };
实施例1(不工作):
(function() { var nameOfClass = "Two"; dojo.require("my.namespace." + nameOfClass); dojo.addOnLoad(function() { var oneOrTwo = new my.namespace[nameOfClass](); }); }());
错误:的ReferenceError:未定义nameOfClass。
实施例2(不工作):
(function() { var nameOfClass = "Two"; dojo.requireIf(nameOfClass == "One", "my.namespace.One"); dojo.requireIf(nameOfClass == "Two", "my.namespace.Two"); dojo.addOnLoad(function() { var oneOrTwo = new my.namespace[nameOfClass](); }); }());
错误:的ReferenceError:未定义nameOfClass。
例3(作品):
(function() { window.nameOfClass = "Two"; dojo.requireIf(window.nameOfClass == "One", "my.namespace.One"); dojo.requireIf(window.nameOfClass == "Two", "my.namespace.Two"); dojo.addOnLoad(function() { var oneOrTwo = new my.namespace[nameOfClass](); }); }());
出于某种原因,它看起来好像需要和requireIf只允许在他们里面的全局变量。这是目前的局限性,还是我做错了什么?
更新1:
因此,如果我理解你(@Maine,@jrburke)正确,这是debugAtAllCosts的限制?如果上述代码构建为跨域(添加xd文件前缀/后缀)并执行 - 它将按预期工作?
如果是这种情况,那么本地测试将作为跨域执行的代码的正确方式是什么,而不进行实际构建?
这也让我质疑预解析dojo.require(s)的动机。如果loader_xd不会(或者不能)预解析,为什么为测试/调试创建的方法是这样做的?
更新2:
由于在更新1以上没有与之密切相关的一个两个问题,我搬到他们出到separate discussion。
谢谢@jrburke,但使用普通的dojo加载器将不允许测试代码的行为,因为它将在xd构建之后执行;因为前者将使用同步xhr来检索dojo.require [s],而不是使用异步“脚本”(loader_xd)。 – 2009-12-17 15:19:10