Javascript Dojo函数参数顺序

Javascript Dojo函数参数顺序,javascript,parameters,dojo,Javascript,Parameters,Dojo,使用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/re

使用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,错误消失了。我在另一个不同参数的脚本中遇到了同样的问题。是否有一些文档说明如何对参数进行排序?dojo元素是否必须在数字元素之前,dojo/domReady不能承受

顺序应与您在模块名称数组中维护的顺序相同。这意味着以下各项是正确的:

require(["my/first", "my/second"], function(first, second) {
    ...
});
但是,当您使用回调中不需要返回值的模块时,应该将它们插入最后一个

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
。因此,调用
请求
对象可能不起作用

因此,您需要记住的是,您需要保持适当的顺序,并且没有返回值(或您不需要的返回值)的模块应该放置在最后一个

require(["my/first", "my/second", "dojo/domReady!"], function(first, second) {

});
如果未将它们放置在最后一个位置,则必须指定返回值,例如,下一个示例将起作用:

require(["my/first", "dojo/domReady!", "my/second"], function(first, domReady, second) {
    ...
});

但是这是一种内存浪费,因为
domReady
参数将不包含任何有用的数据(至少,如果您不使用它的话)。

顺序应该与您在模块名称数组中保持的顺序相同。这意味着以下各项是正确的:

require(["my/first", "my/second"], function(first, second) {
    ...
});
但是,当您使用回调中不需要返回值的模块时,应该将它们插入最后一个

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
。因此,调用
请求
对象可能不起作用

因此,您需要记住的是,您需要保持适当的顺序,并且没有返回值(或您不需要的返回值)的模块应该放置在最后一个

require(["my/first", "my/second", "dojo/domReady!"], function(first, second) {

});
如果未将它们放置在最后一个位置,则必须指定返回值,例如,下一个示例将起作用:

require(["my/first", "dojo/domReady!", "my/second"], function(first, domReady, second) {
    ...
});

但是这是一种内存浪费,因为
domReady
参数将不包含任何有用的数据(至少,如果您不使用它的话)。

顺序很重要,正如Dimitri所说,但实际上是异步模块定义()规范描述了这一点:它不是特定于Dojo的东西


如果您使用另一个AMD加载程序,例如,您将看到相同的行为。

正如Dimitri所说,顺序很重要,但实际上是异步模块定义()规范描述了这一点:它不是特定于Dojo的东西


如果您使用另一个AMD加载程序,例如,您将看到相同的行为。

在使用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,在编写函数时,声明参数类型,后跟参数名称。

使用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,在编写函数时,声明参数类型,后跟参数名称