dojo提供声明

时间:2011-09-19 19:07:33

标签: dojo

我正试图清除一些我从dojo文档中得不到的东西。 当我创建一个dojo提供时,我认为这就像创建一个包含对象的命名空间。例如。

myApp = {container:{}}

写在dojo提供的将是:

dojo.provide( 'myApp.container');

现在我已经阅读过这是一个全球化的地方。不确定我是否将其作为命名空间或者说这是真的。

我遇到的另一个问题是,如果我使用声明创建一个类,我需要使用provide来为我创建该命名空间。例如

myClass.js file

dojo.provide('myApp.myClass');

dojo.declare("myApp.myClass", null, {

  constructor: function(){
    console.log("myApp.myClass created");
  }

});

现在如果有真相提供导致全局变量那么现在这不是一个全局类。 当我从我的app.js文件中执行console.log时,它是我的main.js文件,它不显示为全局但实际上是名称空间myApp.myClass。

如果有真相,那么有人可以清楚这一点,因为它有点奇怪。

1 个答案:

答案 0 :(得分:3)

首先,为了澄清术语“全局”,技术上myApp是全局的 - 它是浏览器window对象的变量。虽然是,但最终您的模块定义的对象/类包含在该全局对象中(因此在其下面“命名空间”),顶级命名空间本身表示为全局变量;它可以被页面/应用程序中的任何脚本访问。

现在,关于声明问题。假设此代码进入自己的模块以通过dojo.require加载,是的,您仍然需要dojo.provide。虽然dojo.provide的一个目的是确保您将填充的变量(例如myApp.MyClass)并且任何父命名空间都存在于前面,但它的另一个目的基本上就像对{{1}的ACK一样。 SYN,即“是的,你问dojo.require,那就是我。”我很确定你会发现,如果没有那个myApp.MyClassdojo.provide会失败,认为它从未找到它所寻找的模块。

希望能回答你的问题。