2011-09-20 37 views
0

我有困难包装我的头编码dojo风格。我被它吸引的原因是因为它的类风格编码。我已经完成了AS开发和一些Java,所以对我来说它是有意义的。我做了一些jquery风格的DOM工作,但我需要为我开始的项目提供更多基于框架的设置。 我的问题是我应该创建一切与声明的类,然后在需要时要求他们。或者,我可以像常规JavaScript模块一样使用名称空间编写闭包类型函数。我很困惑。道场风格发展

示例我想要一组负责管理数据的方法。然后我想拥有处理特殊ajax调用的另一个方法集合。我是否会在单独的js文件中为这些方法组中的每个方法声明一个类?然后在我的app.js中,这是我处理所有类的初始化的应用程序类,我是否会在dojo.ready(){} 之前需要这两个类,然后一旦调用ready方法,我可以开始使用这些类。

有人可以在我出去玩之前让我直接来到这里。 是否需要为该js文件提出加载请求,如果是这样,您总是必须使用ready方法。如果是这样,最好在应用程序初始化开始时预先要求一堆类。

+0

没有道场的人,任何人都可以回答这些问题的一些? – Chapsterj

+0

哎呀,一个小时(编辑:对不起,3个小时;仍然适用)不等待一个答案;)我现在写一个。 –

+0

嘿肯对不起,听起来很挑剔,但我有点沮丧,阅读了几小时和几小时的相同文档,没有完全解释我的问题,或者他们这样做,我没有得到它。我甚至一直在试图找到Util类的例子,你不必实例化它们。好像它要么声明它,并用新的myClass调用它,有时我只是想创建一个我可以公开调用的util或helper类。如果您有时间回答上面的一些问题,那就太好了。再次抱歉,如果我遇到不耐烦。 – Chapsterj

回答

2

从技术上说,对于你想要做的事情,你可以采取任何方式 - 使用dojo.declare或简单地创建一个包含函数成员的对象。我倾向于做后者,因为dojo.declare的精心设计的继承考虑总是过度使用,在这种情况下你将不会使用它,并且当你只想要实例化任何东西时通常没有任何意义将一些实用方法组合在一起。

对于简单的工具组一起的方法,我倾向于做的东西沿着这些路线模块:

dojo.provide('my.utils'); 

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

    doSomethingElse: function(){ 
     /* do something else... */ 
    } 
}; 

RE装载,如果我读你的权利,那么,你有权利理念。在你的网页中,你需要的模块是dojo.require(...)(也许只有一个,如果你有其他需要的其他依赖关系)。然后,期望这些模块加载的页面中的任何代码都应该在传递给dojo.ready的函数中。这确保即使在模块异步加载的情况下(即使用跨域加载器),您的代码仍然可以工作。 dojo.ready明确地等待(1)DOM准备就绪,并且(2)所有dojo.required模块直到要加载的点。

请注意,在模块本身内部,为了等待dojo.require d模块的加载,您不需要附上代码dojo.ready;这是由加载程序自动计算出来的。 (但是,如果模块中的某些逻辑需要等待DOM准备就绪,那么您仍然会依赖于dojo.ready。)

我已经在过去写过更多关于dojo.ready的内容;也许这将是一个有益的阅读:http://kennethfranqueiro.com/2010/08/dojo-required-reading/

+0

谢谢你的详细信息。如果您不需要声明的额外功能,那么这种典型风格也是如此。你还可以使用闭包函数和其他javascript模式,并将它们分配到命名空间中,并且仍然使用require()方法加载它们。只是想确保在不好的练习时我不会开始写出各种各样的模式。很多时候我不需要多次使用这个对象,所以不需要实例化它。 – Chapsterj

+0

你可以在表单中指定任何你想要的“my.utils”,它会没事的。是的,将模块的主体放在立即调用的函数表达式中以创建闭包供您使用并不罕见。 –

+0

非常感谢您为我清理。 – Chapsterj