关于Dojo newb的Dojo模块的问题?

时间:2012-02-17 04:24:33

标签: javascript dojo

我是Dojo的新手所以我不太了解Dojo的所有功能。这里有一些问题,但我肯定其中一些看起来真的很愚蠢,因为我还没有弄清楚Dojo的结构如何:

  1. 如何在单个js文件中创建多个模块并在其创建的文件中访问模块?另外,如何从包含多个模块的文件中访问特定模块?

  2. require和define有什么区别?

  3. 我成功地从文件中需要一个模块,但我无法弄清楚如何从文件中取出变量,你是怎么做到的?

  4. 我在看Dojo是如何需要它的模块的,并注意到它为每个文件执行了一个http请求,但是当你处理大量模块和/或在一个大型站点上时,效率并不高,你真的想最大限度地减少必要的http请求数量吗?这是怎么回事?

2 个答案:

答案 0 :(得分:4)

阅读The Dojo Loader将提供答案。

基本上 module = file 并且经常(作为最佳实践) module = file = class (更确切地说,public类通过{{定义1}})。

广告#4:您需要使用The Dojo Build System,这将解决所有依赖项并将所有模块放入单个文件(或更多文件,这取决于您的构建配置文件)。看看Dojo Boilerplate项目,它可能有助于构建您的应用程序。

答案 1 :(得分:1)

  1. 如何在单个js文件中创建多个模块?

    虽然可以这样做,并且在构建系统创建图层文件时由构建系统完成,但不建议这样做。将多个模块放在一个文件中意味着您必须使用不同形式的 define ,它为它们的eahc提供显式ID。这不太灵活,因为模块ID自动从文件名和路径派生(与旧式模块相比,这与相对路径一起使得很多更容易移动和重命名AMD模块)< / p>

  2. require和define有什么区别?

    define 是一个强化版本的require,它定义了一个带有返回值的新模块。

  3. 我成功地从文件中需要一个模块,但我无法弄清楚如何从文件中获取变量。

    我不确定wha toyu对此有何意义(没有给出具体的可运行示例),但您所要做的就是创建一个对象作为模块的值并从 define 返回。这与使用手动“命名空间”

    以旧方式定义模块的方式相差不远
    //foo.js
    define([], function(){
    
        var M = {}; //the exported stuff will go here
    
        var myVariable = 16; //private function variables are private (like they are everywhere else)
                             //and cannot be seen from the outside
    
        M.anumber = myvariable + 1; //things on the returned object can be seen from the outside
    
        return M; //people who  require this module will get this return value
     });
    
    //bar.js
    define(['foo'], function(foo){
        console.log( foo.anumber );
    });
    
  4. 我正在研究Dojo如何需要其模块,并注意到它为每个文件执行了http请求...

    正如phusick指出的那样,构建系统可用于将所有模块捆绑到一个文件中(为您提供两全其美 - 开发期间的模块化和部署期间的性能)。它还可以做其他很酷的事情,比如捆绑CSS并通过minifier或通过Closure编译器传递Javascript,检查ifdef是否用于创建依赖于平台的构建等。