使用dojo声明函数时,参数的顺序似乎是正确的。此函数头导致错误:
require(["dojo/dom",
"dijit/Dialog",
"dijit/form/Form",
"dijit/form/TextBox",
"dijit/form/ValidationTextBox",
"dijit/form/Textarea",
"dijit/form/Button",
"dojox/validate/web",
"dojo/request",
"dojo/domReady!"],
function(dom, Dialog, Form, TextBox, ValidationTextBox, TextArea, Button, request)
request.post的执行导致了一个未定义的错误。然后我把公园的顺序改为:
require(["dojo/dom",
"dojo/request",
"dijit/Dialog",
"dijit/form/Form",
"dijit/form/TextBox",
"dijit/form/ValidationTextBox",
"dijit/form/Textarea",
"dijit/form/Button",
"dojox/validate/web",
"dojo/domReady!"],
function(dom, request, Dialog, Form, TextBox, ValidationTextBox, TextArea, Button ){
通过在订单中较早地移动dojo/request和request,错误消失了。我在另一个不同parm的脚本中遇到了同样的问题。是否有一些文档解释了如何对参数进行排序?dojo元素必须在数字元素之前吗,dojo/domReady不能承受吗?
顺序应该与您在模块名称数组中维护的顺序相同。这意味着以下内容是正确的:
require(["my/first", "my/second"], function(first, second) {
...
});
但是,当您使用回调中不需要返回值的模块时,它们应该插入last。
require(["my/first", "my/second", "dojo/domReady!"], function(first, second) {
});
如果您不维护该顺序,例如在下一个示例中,那么您将遇到问题,因为参数将包含不起作用的内容。
require(["my/first", "dojo/domReady!", "my/second"], function(first, second) {
// "second" doesn't work
});
在第一个示例中,您在dojo/request
之前导入dojox/validate/web
,但在回调中没有dojox/validate/web
的参数。结果很简单,名称为request
的参数将包含dojox/validate/web
的返回对象,而不是dojo/request
的返回对象。因此,调用request
对象可能无法工作。
因此,您需要记住的是,您需要保持正确的顺序并且没有返回值(或您不需要的返回值)的模块应该放在最后。
如果你没有把它们放在最后一个位置,那么你必须指定一个返回值,例如,下一个例子会起作用:
require(["my/first", "dojo/domReady!", "my/second"], function(first, domReady, second) {
...
});
但这是浪费内存,因为domReady
参数将不包含任何有用的数据(至少,如果您不使用它的话)。
正如Dimitri所说,顺序很重要,但实际上是异步模块定义(AMD)规范描述了这一点:它不是Dojo特定的东西。
如果你使用另一个AMD加载程序,比如requirejs,你会看到同样的行为。
在使用dojo时,我会想到要求(["])部分作为传递到函数中的参数的参数类型。
因此,
require(["dojo/dom",
"dijit/Dialog",
"dijit/form/Form",
"dijit/form/TextBox",
"dijit/form/ValidationTextBox",
"dijit/form/Textarea",
"dijit/form/Button",
"dojox/validate/web",
"dojo/request",
"dojo/domReady!"],
function(dom, Dialog, Form, TextBox, ValidationTextBox, TextArea, Button, request)
当你试图呼叫时
request.post
它处理request参数,就好像它是dojox/validate/web对象的类型一样。如果您的函数签名是:
function(dom, Dialog, form, TextBox, ValidationTextBox, TextArea, Button, validateWeb, request)
你的代码会很好用的。
另一个类似的例子是:
function("dojo/dom" dom, "dijit/Dialog" Dialog, "dijit/form/Form" Form, ..."dojo/request" request, string[] args0)
上面的语法显然不合适,但它有助于我以这种方式将其可视化,就好像它是一种像java或.net这样的语言,在编写函数时,您可以声明参数类型,然后再声明参数的名称。