博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hello Dojo!(翻译)
阅读量:5117 次
发布时间:2019-06-13

本文共 6539 字,大约阅读时间需要 21 分钟。

欢迎学习DOJO!在本教程中,你将学些到如何加载DOJO,并能够了解DOJO的一些核心功能。你也会了解到DOJO的AMD模式,一种基于模块化架构。该架构可以让你通过扩展模块的方式扩展你的网站或应用的功能,发现错误的时候,如何找到解决方案。

开始

使用DOJO很简单,就像使用其他的javascript文件一样,我们只需要把dojo.js文件包含到问的页面里面就可以了。DOJO在CDN上很流行,这意味着我们可以直接在CDN上直接发布的DOJO库。下面我们就创建一个html文件,命名为hellodojo.html,在该文件中输入一下内容,保存后,使用浏览器打开。

1  2  3  4 
5 Tutorial: Hello Dojo! 6 7 8

Hello

9
10 12 13

一般情况下,一旦你加载了javascript库文件之后,你就可以使用该文件定义的所有功能。在过去的dojo版本中是这样的,但从1.7版本开始,dojo采用得了异步模块定义模式(AMD),该模式可以让开发人员采用模块化的方式开发Web应用。之所以选择AMD模式,是因为该模式基于存jsvascript代码环境工作,并可以让源代码在Web浏览器下运行。AMD可通过优化资源生成和加载方式,提高Web应用的资源加载效率,以提高系统性能。

当Dojo.js被加载之后,我们可以使用哪些功能呢?我们可以使用dojo的AMD模式的模块装载器,该装载器定义了requiredefine两个全局函数。后面我们有专门介绍AMD的文章。作为初始DOJO,我们只要知道require函数是加载一个模块以使用它们,而define函数是用来定义我们自己的模块。 一般情况下,每个模块都对应着一个javascript物理文件。

dojo/dom和dojo/dom-construct就是dojo为操作html DOM定义的一些基础模块,下面让我们看下如何加载这些模块,并使用它们。

1  2  3  4     
5 Tutorial: Hello Dojo! 6 7 8

Hello

9
10 12 13 22 23

 

require函数的第一个参数(14-17行)是模块标识列表,用来标识你想加载哪些模块。一般情况下,这些模块的标识都映射了定义模块的Javascript文件名。如果你下载了dojo的源码发布包,打开dojo文件夹,你会在该文件夹下发现dom.jsdom-construct.js文件,这两个文件就分别定义了'dojo/dom''dojo/dom-construct'两个模块。

AMD加载模块的操作是异步执行的,我们也知道,一般在javascript中,执行异步操作后,都会有回调函数。require函数的第二个参数(17行)就是定义的回调函数,在这个函数中,你就可以使用加载的模块提供的功能编写你自己的javascript代码。AMD加载器会把每个模块当成参数传递给回调函数,顺序和模型标识数组中的顺序是一致的。你可以随意的命名回调函数中的参数名字,但为了代码的可读性,一般我们会以模块的标识名称或者相似的名字为参数命名。例如上面的代码中,把"dojo/dom"模块对应的参数命名为dom,把dojo/dom-construct模块对应的回调函数参数命名为domconstruct。当然你也可以把这两个模块对应的参数分别命名为A和B,我们的代码同样是可以正常工作的,但我们不建议你这样命名。

在代码的第18和19行,你可以看到我们利用模块dom和dom-construct模块,通过id获取了dom节点,并修改了节点的内容。

AMD加载器会自动的加载我们请求加载模块所依赖的其他模块,所以你只要把你直接需要调用的模块添加到依赖列表中就可以了,即require函数的第一个参数中。

定义AMD模块

 在上面你已经通过实例了解了如何加载和使用模块。下面我们定义个自己的模块,并加载使用它。在此之前,你需要一个自己的HTTP服务器,从HTTP服务器上加载HTML文件。本地文件也是可以的,但有时候本底文件由于安全性的一些问题,会造成运行结果有些细微的差别。对于这些例子,你不需要在你的Web服务器上做更多的配置,只要能够正常发布服务文件就可以了。在HelloDojo.html页面的同级目录下创建demo目录,在demo下创建myModule.js文件。

demo/    myModule.jshellodojo.html

 

 在该文件中输入一下代码:

 

1 define([ 2     // The dojo/dom module is required by this module, so it goes 3     // in this list of dependencies. 4     'dojo/dom' 5 ], function(dom){ 6     // Once all modules in the dependency list have loaded, this 7     // function is called to define the demo/myModule module. 8     // 9     // The dojo/dom module is passed as the first argument to this10     // function; additional modules in the dependency list would be11     // passed in as subsequent arguments.12 13     var oldText = {};14 15     // This returned object becomes the defined value of this module16     return {17         setText: function (id, text) {18             var node = dom.byId(id);19             oldText[id] = node.innerHTML;20             node.innerHTML = text;21         },22 23         restoreText: function (id) {24             var node = dom.byId(id);25             node.innerHTML = oldText[id];26             delete oldText[id];27         }28     };29 });

 

AMD的define函数接受的参数和reqiure函数接受的参数类似,都是模块标识数组以及一个回调函数。AMD加载器保存了回调函数返回的值,回调函数返回的值就是该自定义模块提供的功能。当其他的代码通过require函数或define函数加载该模块候,都可以调用该模块定义的这些功能,即回调函数返回的一些函数等。

CDN的使用

通过Dojo加载本地自定义的一些模块需要一些额外的配置。更详细的内容会再后面的章节中介绍。

下面把Hellodojo.html中的代码更新为以下内容。

1  2  3  4     
5 Tutorial: Hello Dojo! 6 7 8

Hello

9
10 25
26 27 28 39 40

上述代码中,我们对dojo进行了配置,并加载demo/myModule定义了主体代码,这段代码可完成对页面的一些操作。就如你看到的,定义和加载模块是比较简单的。We've also changed the URL to dojo.js to omit the protocol (line 26) - this creates a link that uses whatever protocol the page is using (http or https), preventing mixed content which raises security warnings in some browsers.

使用AMD模式可以帮助你组织模块化的javascript源代码,且可在浏览器中立即执行,并能够很好的进行调试。AMD模块使用局部命名方式为变量命名,这样可以避免使用全局命名方式导致的代码混乱,并可以提高名称解析速度。AMD是一种标准协议,包含了多种实现方式。所以你不必拘泥于一种实现方式,任何基于AMD的加载器都可以加载使用基于ADM定义的模块。

等待DOM加载完成

进行Web应用开发时,常要处理的问题之一就是在执行代码之前,要确保页面的DOM节点都已经加载并可以正确获取。在dojo中,使用一种称为"插件"的特殊AMD模块实现。插件和其他ADM模块一样可以被调用,but their special functionality is only activated by adding an exclamation point (bang) to the end of the module identifier。在DOM节点加载准备完毕事件上,dojo提供了dojo/domReady插件。主要define或reqiure函数再模块依赖中使用了该插件,那么其调用函数只会在DOM加载完毕后才会被调用。

 

1  require([2      'dojo/dom',3      'dojo/domReady!'4  ], function (dom) {5      var greeting = dom.byId('greeting');6      greeting.innerHTML += ' from Dojo!';7 });

 

上面的例子是在greeting节点上加载了一些文本,而完成这些工作必须要等DOM节点加载完毕才能执行。请注意,代码在加载dojo/domReady模块时,后面加了!符号。如果没有该符号,dojo会把该模块当成普通的AMD模块处理。

在一些情况下,我们调用例如dojo/domReady这样的模块,不是为了调用其定义的功能,而是另有他用。但AMD加载器对此一无所知,它依旧把每个模块作为参数传递给回调函数。所以有一些你不需要调用的模块标识,可以放在模块标识数组的最后面,在回调函数中,就可以忽略这些模块。

后面的文章还会对Dojo操作DOM有具体的描述。

添加视觉效果

现在我们可以通过添加一些动画效果,让我们的例子看起来更加生动活跃一些。我们可以加载dojo/fx模块来给我们的页面添加效果。下面我们通过dojo/fx模块的slideTo函数给greeting节点添加渐变动画。

1 require([ 2     'dojo/dom', 3     'dojo/fx', 4     'dojo/domReady!' 5 ], function (dom, fx) { 6     // The piece we had before... 7     var greeting = dom.byId('greeting'); 8     greeting.innerHTML += ' from Dojo!'; 9 10     // ...but now, with an animation!11     fx.slideTo({12         node: greeting,13         top: 100,14         left: 20015     }).play();16 });

 

 

如上代码所示,我们又增加了一个队dojo/fx模块的依赖,并使用该模块在greeting节点上播放动画。

使用dojo源码

CDNs是最便利的(在网上发布好的jsvascript库,即我们使用的//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js),我们再教程中使用了这种方式。主要是因为你可以随意的拷贝例子代码到你的机器上,而不用修改任何地方就可以正常的运行。但他们也有一些缺点:

  • 为了性能,在cdns上的库都是进行了最小和最优处理后的dojo的发布版本,这样做的目的是尽可能的减小网络传输量。但这样会导致当你的代码出现什么问题的时候,很难调试。
  • 使用cnds,需要要求使用你Web应用的用户使用的机器必须可以访问互联网,而有时候,特别是一些内部应用或涉密环境下是不现实的。
  • It requires more effort to include your own custom modules.
  • 当你发布你的Web应用时,你可能由于自己的特殊应用或者目标浏览器等一些原因,需要根据自己的情况修改一些配置或代码。

通过下面的步骤,你可以获取dojo的源码,并在此基础上开发自己的项目:

- 点击该链接,在打开的网页底部可以看到下载dojo源码的链接。如果你熟悉git或者gitHub,你可以直接从github上下载源码。

2.解压dojo的压缩包,拷贝到你的工程中,如下所示:

1 demo/2     myModule.js3 dojo/4 dijit/5 dojox/6 util/7 hellodojo.html

 

3.把原来加载cdn上dojo.js的代码换成加载本地dojo.js的代码。

1 

 

 4.更新你的dojo模块包配置代码

1 var dojoConfig = { 2     async: true, 3     baseUrl: '.', 4     packages: [ 5         'dojo', 6         'dijit', 7         'dojox', 8         'demo' 9     ]10 };

 

获取帮助

每当你感到困惑或遇到棘手的问题时,你要知道你不是一个人。志愿者通过Email()、交互聊天()的方式为你提供帮助。如果你在我们提供的资源中发下错误,或者有歧义、令人难以理解的地方,反馈连接地址就在本页的下部,你可以通过该方式让我们知道。

如果你需要紧急或隐私的帮助,或者有我们志愿者也没有解决掉的问题,我们可以提供商业技术支持()或培训()。

下一步要做什么

使用Dojo Toolkit就像添加一个脚本标签或者加载几个模块一样简单。但dojo有着巨大的广度和深度,而现在我们只是接触到了其皮毛。根据你的需求,有好几条路径可以让你学习本系列教程。

  • 如果你以前使用过DOJO,现在只是想更深入的了解ADM知识,或者了解最新改变的一些概念,那么你可以看下现代dojo()。如果你是想在已有的网站应用上添加一个特色和效果,那么你可以看、、 和 教程。
  • 如果你想在你的页面上加上Ajax应用,可以看教程。
  • 如果你希望在你的页面或Web应用上整合富客户端应用的小部件,可以查看 以及 。
  • 如果你正想学习复杂web应用的架构设计或者想了解DOJO提供的强大的功能,可以查看。
  • 如果你的目标是移动应用,那么可以查看。

无论你的目的是什么,dojo提供了一套行业领先的开源公里,它可以帮助我们在开发项目时达到事半功倍的效果。We look forward to seeing what you come up with!

 

转载于:https://www.cnblogs.com/mytudousi/p/6163806.html

你可能感兴趣的文章
大三上学期软件工程作业之点餐系统(网页版)的一些心得
查看>>
Java语言概述
查看>>
关于BOM知识的整理
查看>>
使用word发布博客
查看>>
微服务之初了解(一)
查看>>
GDOI DAY1游记
查看>>
MyBaits动态sql语句
查看>>
HDU4405(期望DP)
查看>>
拉格朗日乘子法 那些年学过的高数
查看>>
vs code 的便捷使用
查看>>
Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JS 中的跨域请求
查看>>
JAVA开发环境搭建
查看>>
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
遍历Map对象
查看>>
MySQL索引背后的数据结构及算法原理
查看>>