我是Dojo的新手所以我不太了解Dojo的所有功能。这里有一些问题,但我肯定其中一些看起来真的很愚蠢,因为我还没有弄清楚Dojo的结构如何:
如何在单个js文件中创建多个模块并在其创建的文件中访问模块?另外,如何从包含多个模块的文件中访问特定模块?
require和define有什么区别?
我成功地从文件中需要一个模块,但我无法弄清楚如何从文件中取出变量,你是怎么做到的?
我在看Dojo是如何需要它的模块的,并注意到它为每个文件执行了一个http请求,但是当你处理大量模块和/或在一个大型站点上时,效率并不高,你真的想最大限度地减少必要的http请求数量吗?这是怎么回事?
答案 0 :(得分:4)
阅读The Dojo Loader将提供答案。
基本上 module = file 并且经常(作为最佳实践) module = file = class (更确切地说,public
类通过{{定义1}})。
广告#4:您需要使用The Dojo Build System,这将解决所有依赖项并将所有模块放入单个文件(或更多文件,这取决于您的构建配置文件)。看看Dojo Boilerplate项目,它可能有助于构建您的应用程序。
答案 1 :(得分:1)
如何在单个js文件中创建多个模块?
虽然可以这样做,并且在构建系统创建图层文件时由构建系统完成,但不建议这样做。将多个模块放在一个文件中意味着您必须使用不同形式的 define ,它为它们的eahc提供显式ID。这不太灵活,因为模块ID自动从文件名和路径派生(与旧式模块相比,这与相对路径一起使得很多更容易移动和重命名AMD模块)< / p>
require和define有什么区别?
define 是一个强化版本的require,它定义了一个带有返回值的新模块。
我成功地从文件中需要一个模块,但我无法弄清楚如何从文件中获取变量。
我不确定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 );
});
我正在研究Dojo如何需要其模块,并注意到它为每个文件执行了http请求...
正如phusick指出的那样,构建系统可用于将所有模块捆绑到一个文件中(为您提供两全其美 - 开发期间的模块化和部署期间的性能)。它还可以做其他很酷的事情,比如捆绑CSS并通过minifier或通过Closure编译器传递Javascript,检查ifdef是否用于创建依赖于平台的构建等。