我试图了解如何通过dojo命名类。我想我已经完成了教程,但我可能错过了一些东西。
是
define(["dojo/_base/declare"], function(declare){
return declare(null, {
constructor: function(name){
this.name = name;
}
});
});
在Person.js中与
相同define(["dojo/_base/declare"], function(declare){
return declare("Person", null, {
constructor: function(name){
this.name = name;
}
});
});
在SomeOtherFileName.js中?
我们什么时候需要在文件名中表示文件名vs作为声明的参数?第二个例子会产生任何问题吗?
答案 0 :(得分:2)
类名(declare()
的第一个参数)不需要表示文件的路径。实际上,它是可选的。构造函数的可选名称(松散地,"class"
)存储在创建的原型中的"declaredClass"
属性中。它将用作创建的构造函数的全局名称。
例如:
define(["dojo/_base/declare"], function(declare){
return declare("my.firstWidget", {
constructor: function(){
console.log(this.declaredClass)
}
});
});
这将创建一个全局构造函数my.firstWidget
,可以像这样使用它:
require(["dojo/dom", "myApp/myWidget"], function(dom){
var my = new my.firstWidget(); //note this line
my.placeAt(dom.byId('someID'));
});
但是,这是一个很糟糕的用途,我们有dojo,我们必须以dojo的方式来做,这只是一个例子。
但是,我们可以以声明的方式使用它,如下所示:
<div data-dojo-type="my.firstWidget"></div>
这没关系。
实际上,declare()
的第一个参数在新开发中被省略。这可确保全局命名空间不会被类污染,并减少名称冲突的可能性。
AMD Module ID (MID)
成为通常引用的类名。此名称隐含在文件路径中。例如,myApp/myWidget.js
会生成MID myApp/myWidget
。如果我们省略MID
并想要使用声明方式
class name
<div data-dojo-type="myApp/myWidget"></div>
这也有效,如果我们将class name
提交给declare()
看看here在道场中有很多关于declare()
的示例和信息。
答案 1 :(得分:1)
您应该将您的类放在define语句中,并使用绝对路径来定义它。在函数定义中,您可以将它们命名为任何您喜欢的名称,只要您保持顺序相同即可。如果在代码中引用这些,则需要使用用于函数名称的值。注意始终使用关键字&#34;此&#34;在调用函数之前。否则它就找不到了。
define{["dojo/_base/declare",
"this/is/my/path/Person",
"this/is/my/path/SomeOtherFileName"],
function(declare,
myPeopleClass,
anotherFile) {
return declare("this.is.my.path.CurrentFile", [anotherFile], {
postCreate : function() {
var value = this.anotherFunction();
//some other code
},
anotherFunction : function() {
//more code
return something;
}
});
});