我创建了一个依赖于dojox / data / JsonRestStore的Dojo模块,如下所示:
define("my/MyRestStore",
["dojo/_base/declare", "dojox/data/JsonRestStore"],
function(declare, JsonRestStore) {
var x = new JsonRestStore({
target: '/items',
identifier: 'id'
});
...
哪个好。但现在我想加载JsonRestStore代码的未压缩版本,以便我可以调试它。我找不到任何关于如何执行此操作的文档,但由于有一个名为'JsonRestStore.js.uncompressed.js'的文件,我将代码更改为:
define("my/MyRestStore",
["dojo/_base/declare", "dojox/data/JsonRestStore.js.uncompressed"],
function(declare, JsonRestStore) {
...
认为这可行。
我可以看到在FireBug中加载了JsonRestStore.js.uncompressed.js文件,但在尝试执行new JsonRestStore
时收到错误:
JsonRestStore is not a constructor
这应该有用吗?
有没有办法配置Dojo以使用所有模块的未压缩版本?这就是我真正想要的,但是如果这是唯一的方法,那么我会在每个依赖的基础上做到这一点。
我找到了实现我想要做的方法:将JsonRestStore.js.uncompressed.js文件重命名为JsonRestStore.js。
然而,这看起来有点像一个hacky解决方法,所以我仍然想知道是否有更好的方法(例如通过配置)。
答案 0 :(得分:2)
您有两个选择
1)创建自定义构建。自定义生成将输出一个可用于调试的未压缩文件。想想dojo.js.uncompressed.js,但它包含了你使用的所有额外模块。
OR
2)对于开发环境,请使用dojo源代码。这意味着从开发环境中下载Dojo Toolkit SDK并引用dojo.js。
对于我所从事的项目,我同时做了两件事。我设置了Dojo配置,以便它可以是动态的,我可以使用查询字符串参数更改我想要的配置。
当我调试问题时,我将使用第一个选项让我逐步执行代码并查看发生了什么。当我编写一些重要的j并且不希望自定义构建的开销看到我的更改时,我使用第二个选项。
我在
更多地描述了这一点http://swingingcode.blogspot.com/2012/03/dojo-configurations.html
答案 1 :(得分:1)
我认为这是因为加载器通过使用的文件约定声明了它的类加载(模块)。 1.7加载器还没有太强大,我已经遇到了类似的问题,直到意识到如何分离'。'和'/'字符。
它只是一个合格的猜测;但我相信它与“。”的解释有关。类名中的字符,表示子命名空间而不是模块名称。
'define(/ * BLANK * / [/ * DEPENDENCIES * /],...)' - 其中没有给出第一个字符串参数 - 由文件名(basename)加载。返回的声明也有一个说法。因此,对于jsonrest的示例,它的拆分/解析如下:
toplevel = dojox
mid = data
modulename = JsonRestStore.js.uncompressed
(失败..模块呈现为dojox.data.JsonRestStore.js.uncompressed,而不是dojox.data.JsonRestStore应该如此)。
所以,有三个选择;
<script src="{{dataUrl}}/dojox/data/JsonRestStore.js.uncompressed.js"></script>
加载未注释的类,并在dojo.ready define([], function(){})
修改为define("JsonRestStore", [], function() {})
可以解决问题(未经确认)需要文字填充:)
define("my/MyRestStore",
["dojo/_base/declare", "dojo/text!dojox/data/JsonRestStore.js.uncompressed.js"],
function(declare, JsonRestStore) {
...
JsonRestStore = eval(JsonRestStore);
// not 100% sure 'define' returns reference to actual class,
// if above renders invalid, try access through global reference, such as
// dojox.dat...