Dojo函数参数顺序

时间:2013-07-27 17:17:23

标签: 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/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不能承受吗?

2 个答案:

答案 0 :(得分:1)

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

如果您使用其他AMD加载程序,例如requirejs,则会看到相同的行为。

答案 1 :(得分:0)

在使用dojo时,我想起了     要求([””]) part作为传递给函数的参数的参数类型。

因此,

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