Dojo学习笔记(一):Hello Dojo

简介:

1、开始,创建hellodojo.html文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
< html >
< head >
     < meta  charset = "utf-8" >
     < title >Hello Dojo</ title >
</ head >
< body >
< h1  id = "greeting" >Hello</ h1 >
<!-- load Dojo -->
< script  src = "dojo/dojo.js"     data-dojo-config = "async: true" ></ script >
< script >
     require([
         'dojo/dom',
         'dojo/dom-construct'
     ], function (dom, domConstruct) {
         var greetingNode = dom.byId('greeting');
         domConstruct.place('< i > Dojo!</ i >', greetingNode);
     });
</ script >
</ body >
</ html >

文件目录结构如下:

wKiom1NGWmSBYYGQAABRS693JUY330.jpg

备注:

   (1)dojo/dom和dojo/dom-construct是Dojo操作HTML DOM最基本的两个模块。

   (2)我们将"<script>"标签块放在HTML文档的"body"中,也可以将它放在"header"中并且效果是一样的,但当在你的应用程序的"header"里的"<script>"块里加载大量代码时,会导致代码在加载时,网页处于渲染状态。这会让用户感觉你的应用程序运行缓慢从而降低用户体验,所以我们一般在文档的"body"结尾处加载Dojo代码。


2、定义AMD模块

1、创建模块demo/myModule.js,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
  * Created by Admin on 14-4-10.
  */
define([
     // 在依赖列表中,这个模块需要引用 dojo/dom 模块
     'dojo/dom'
],  function (dom){
     //当所有依赖的模块都加载完毕后,这个方法就会执行从而定义dome/myModule模块
     //dojo/dom作为第一个参数加入这个函数中,其后的依赖项会紧接这加入作为后续参数
     var  oldText = {};
     //这里返回的对象就是这个模块所要定义的值
    //这个myModule模块有一个依赖模块(dojo/dom),模块的返回值是一个对象,对象拥有setText和restoreText两个方法。
     return  {
         setText:  function  (id, text) {
             var  node = dom.byId(id);
             oldText[id] = node.innerHTML;
             node.innerHTML = text;
         },
         restoreText:  function  (id) {
             var  node = dom.byId(id);
             node.innerHTML = oldText[id];
             delete  oldText[id];
         }
     };
});


在前台引用hellodojo.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!DOCTYPE html>
< html >
< head >
     < meta  charset = "utf-8" >
     < title >Hello Dojo</ title >
</ head >
< body >
< h1  id = "greeting" >Hello</ h1 >
<!-- 配置Dojo -->
< script >
     //使用dojoConfig代替data-dojo-config标签,dojoConfig必须在在加载dojo.js之前创建
     //dojoConfig和data-dojo-config功能上是完全一致的,它只不过比前者更容易读取大的配置文件
     var dojoConfig = {
         async: true,
         //这里的代码注册了demo包的正确路径,这样我们就可以在CDN上加载Dojo的同时加载本地自定义模块
         packages: [{
             name: "demo",
             location: location.pathname.replace(/\/[^/]*$/, '') + '/demo'
         }]
     };
</ script >
<!-- 加载Dojo -->
< script  src = "dojo/dojo.js" ></ script >
< script >
     //引用我们创建的模块
     require([
         'demo/myModule'
     ], function (myModule) {
         //利用我们的模块改变问候的文本
         myModule.setText('greeting', 'Hello Dojo!');
         //几秒钟后,恢复文本到原来的状态
         setTimeout(function () {
             myModule.restoreText('greeting');
         }, 3000);
     });
</ script >
</ body >
</ html >


3、等待DOM

   若Dojo代码不是放在Body最后,那么可以加入延迟,等待HTML DOM加载完成后再执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
< html >
< head >
     < meta  charset = "UTF-8" >
     < title >等待DOM</ title >
</ head >
< body >
< script  data-dojo-config = "isDebug:1, async:1"  src = "dojo/dojo.js" ></ script >
< script >
     require([
         'dojo/dom',
         'dojo/domReady!'
     ], function (dom) {
         var greeting = dom.byId('greeting');
         greeting.innerHTML += ' from Dojo!';
     });
</ script >
< h1  id = "greeting" >Hello</ h1 >
</ body >
</ html >

   Dojo提供了许多插件(Plugin),可以像其他模块一样被引用,但他们的特定功能只有在模块标识符的结尾加上感叹号后才会被激活。在DOM ready事件完成后,Dojo提供了dojo/domReady插件,将这个插件包含在任何含有require和define调用的参数里,直到所有的DOM准备无误回调函数才会运行。

   以上的例子在"gressting"节点上添加文本,这种行为只会在DOM加载完毕后准确地执行一次。再一次强调,注意模块标示符结尾加上"!",如果没有感叹号,dojo/domReady模块就跟其他模块一样,只是作为一个简单的函数。

   思考:若去掉'dojo/domReady!',执行结果是什么?


4、添加动画效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
< html >
< head >
     < meta  charset = "UTF-8" >
     < title >添加动画效果</ title >
</ head >
< body >
< script  data-dojo-config = "isDebug:1, async:1"  src = "dojo/dojo.js" ></ script >
< script >
     require([
         'dojo/dom',
         'dojo/fx',
         'dojo/domReady!'
     ], function (dom, fx) {
         var greeting = dom.byId('greeting');
         greeting.innerHTML += ' from Dojo!';
         //调用动画方法
         fx.slideTo({
             node: greeting,
             top: 100,
             left: 200
         }).play();
     });
</ script >
< h1  id = "greeting" >Hello</ h1 >
</ body >
</ html >

   当回调函数获取参数时,模块会以同样的顺序作为数组传入进去。因为dojo/domReady!并没有有意义的返回值,所以我们我们不需要为它添加用于返回的参数。


5、更新Dojo源代码配置

   项目结构如下:

demo/

   myModule.js

dojo/

dijit/

dojox/

hellodojo.html

   更新Dojo包配置:

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





     本文转自stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1393515,如需转载请自行联系原作者















相关文章
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
218294 68
|
22天前
|
Java API 开发工具
百宝箱开放平台 ✖️ Java SDK
百宝箱提供Java SDK,支持开发者集成其开放能力。需先发布应用,准备Java 8+及Maven环境,通过添加依赖安装SDK,并初始化客户端调用对话型或生成型智能体,实现会话管理、消息查询与文件上传等功能。
1178 0
百宝箱开放平台 ✖️ Java SDK
|
7月前
|
Java 开发者
Java 中的 toString() 方法详解:为什么它如此重要?
在Java开发中,`toString()`方法至关重要,用于返回对象的字符串表示。默认实现仅输出类名和哈希码,信息有限且不直观。通过重写`toString()`,可展示对象字段值,提升调试效率与代码可读性。借助Lombok的`@Data`注解,能自动生成标准化的`toString()`方法,简化开发流程,尤其适合字段较多的场景。合理运用`toString()`,可显著提高开发效率与代码质量。
564 0
|
7月前
|
SQL 人工智能 数据可视化
16.1k star! 只需要DDL就能一键生成数据库关系图!开源神器ChartDB让你的数据结构"看得见"
ChartDB是一款开源的数据库可视化神器,通过一句智能查询就能自动生成专业的数据库关系图。无需安装客户端、不用暴露数据库密码,打开网页就能完成从数据建模到迁移的全流程操作,堪称开发者的"数据库透视镜"。
1467 67
|
3月前
|
API 数据安全/隐私保护 Python
拼多多批量上架软件, 电商一键上货发布工具,python电商框架分享
多线程批量上传架构,支持并发处理商品数据 完整的拼多多API签名和token管理机制
|
12月前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
1674 58
|
存储 缓存 Java
释放C盘空间:释放Windows休眠文件和关闭虚拟内存
在 Windows 11 专业版中,可以通过以下步骤来释放休眠文件(Hibernate File),以释放磁盘空间。休眠文件是系统休眠(Hibernate)功能所需要的文件,它保存了系统的当前状态,以便在休眠状态下恢复。如果你不使用休眠功能,如果因为C盘空间不足,可以考虑释放这个文件来腾出磁盘空间。
26428 1
|
Shell Android开发
安卓scheme_url调端:在AndroidManifest.xml 中如何配置 Intent-filter?
为了使Android应用响应vivo和oppo浏览器的Deep Link或自定义scheme调用,需在`AndroidManifest.xml`中配置`intent-filter`。定义启动的Activity及其支持的scheme和host,并确保Activity可由外部应用启动。示例展示了如何配置HTTP/HTTPS及自定义scheme,以及如何通过浏览器和adb命令进行测试,确保配置正确无误。
|
缓存 Java API
API接口性能优化管理
在数字化时代,API性能优化对于提升软件效率和用户体验至关重要。本文介绍了多种优化方法:配置优化包括调整JVM参数等;代码层面减少重复调用并批量操作数据库;池化技术如线程池和HTTP连接池能有效利用资源;数据库优化通过索引提高查询速度;异步处理则使主流程业务不受阻塞;缓存策略如Redis缓存减少数据库访问;可观测性工具如日志平台和APM帮助监控性能。综合运用这些方法,可根据业务需求持续调整优化,显著提升API性能及用户体验。
|
算法
Gzip的文件格式规范
【4月更文挑战第29天】Gzip的文件格式规范
467 1