Javascript dojo风格开发

Javascript dojo风格开发,javascript,dojo,closures,Javascript,Dojo,Closures,我很难理解dojo风格的编码。我被它吸引的原因是它的类风格编码。我已经完成了AS开发和一些java,所以被它吸引对我来说是有意义的。我已经做了一些jquery风格的DOM工作,但是我需要一个更基于框架的设置,用于我正在启动的项目。 我的问题是,我是否应该使用declare将所有内容创建为类,然后在需要时使用它们。或者我可以像普通javascript模块一样使用名称空间编写闭包类型的函数。我很困惑 示例我希望有一组方法来管理数据。然后我想有另一组方法来处理特殊的ajax调用。我会在单独的js文件中

我很难理解dojo风格的编码。我被它吸引的原因是它的类风格编码。我已经完成了AS开发和一些java,所以被它吸引对我来说是有意义的。我已经做了一些jquery风格的DOM工作,但是我需要一个更基于框架的设置,用于我正在启动的项目。 我的问题是,我是否应该使用declare将所有内容创建为类,然后在需要时使用它们。或者我可以像普通javascript模块一样使用名称空间编写闭包类型的函数。我很困惑

示例我希望有一组方法来管理数据。然后我想有另一组方法来处理特殊的ajax调用。我会在单独的js文件中为每一组方法创建一个带有declare的类。然后在我的app.js(我正在处理所有类的初始化的应用程序类)中,我是否需要在dojo.ready(){}之前同时使用这两个类 一旦ready方法被调用,我就可以开始使用这些类了

有人能在我出去之前把我安排在这里吗。
确实需要为该js文件发出加载请求,如果需要,则必须始终使用ready方法。如果是这样的话,最好在应用程序初始化开始时预先要求一堆类

从技术上讲,对于您想要做的事情,您可以选择任何一种方式—使用
dojo.declare
或简单地创建一个包含函数成员的对象。我倾向于使用后一种方法,因为在本例中,
dojo.declare
精心设计的继承注意事项完全是多余的,您不会使用它,而且当您只想将一些实用程序方法组合在一起时,实例化任何东西通常都没有意义

对于简单地将实用程序方法组合在一起的模块,我倾向于按照以下思路做一些事情:

dojo.provide('my.utils');

my.utils = {
    doSomething: function(){
        /* do something... */
    },

    doSomethingElse: function(){
        /* do something else... */
    }
};
重新加载,如果我读对了,那么是的,你的想法是正确的。在您的web页面中,您将
dojo.require(…)
页面所需的模块(如果您在其中进一步需要所有其他依赖项,则可能只有一个)。然后,页面中希望加载这些模块的任何代码都应该在传递给
dojo.ready
的函数中。这确保了即使在异步加载模块的情况下(即使用跨域加载程序),您的代码仍然可以工作
dojo.ready
专门等待(1)DOM准备就绪,(2)所有
dojo.require
d模块加载到该点

请注意,在模块本身中,您不需要为了等待
dojo.ready
而将代码封装在
dojo.require
d模块中进行加载;这是由装载机自动计算出来的。(但是,如果模块中的某些逻辑需要等待DOM准备就绪,则仍然需要依赖
dojo.ready


过去我写了更多关于dojo.ready的文章;也许这会是一个有用的阅读:

没有dojo人,有人能回答这些问题吗?天哪,一个小时(编辑:对不起,3小时;仍然适用)等待答案的时间不长;)我现在就写一篇。嘿,肯,很抱歉听起来有点急躁,但我有点沮丧,因为我读了好几个小时的同一份文件,这些文件并没有完全解释我的问题,或者他们确实解释了我的问题,但我不明白。我甚至一直在尝试寻找不必实例化的Util类的示例。它要么声明它,要么用新的myClass调用它,有时候我只是想创建一个可以公开调用的util或helper类。如果你有时间回答我上面的一些问题,那就太好了。再次抱歉,如果我不耐烦。谢谢你的详细帖子肯。如果您不需要declare的额外功能,那么这就是典型的样式。您还可以使用闭包函数和其他javascript模式,并在名称空间中分配它们,然后仍然使用require()方法加载它们。只是想确保我不会在糟糕的实践中开始编写各种模式。很多时候,我不需要多次使用该对象,因此不需要实例化它。表面上,你可以在该模块中分配任何你想要的
my.utils
,这样就可以了。是的,将模块主体放在立即调用的函数表达式中以创建闭包供您使用并不少见。