我正试图清除一些我从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。
如果有真相,那么有人可以清楚这一点,因为它有点奇怪。
答案 0 :(得分:3)
首先,为了澄清术语“全局”,技术上myApp
是全局的 - 它是浏览器window
对象的变量。虽然是,但最终您的模块定义的对象/类包含在该全局对象中(因此在其下面“命名空间”),顶级命名空间本身表示为全局变量;它可以被页面/应用程序中的任何脚本访问。
现在,关于声明问题。假设此代码进入自己的模块以通过dojo.require
加载,是的,您仍然需要dojo.provide
。虽然dojo.provide
的一个目的是确保您将填充的变量(例如myApp.MyClass
)并且任何父命名空间都存在于前面,但它的另一个目的基本上就像对{{1}的ACK一样。 SYN,即“是的,你问dojo.require
,那就是我。”我很确定你会发现,如果没有那个myApp.MyClass
,dojo.provide
会失败,认为它从未找到它所寻找的模块。
希望能回答你的问题。