Dojo类命名

时间:2016-09-06 18:27:53

标签: dojo

我试图了解如何通过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作为声明的参数?第二个例子会产生任何问题吗?

2 个答案:

答案 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;
       }
});
});