Dojo: Quick Start
1、Dojo学习地址
Dojo 下载:
http://dojotoolkit.org/download/
Dojo参考文档
http://dojotoolkit.org/reference-guide/1.10/dojo/
Dojo API:
2、Dojo 快速开始
2.1 Dojo引入:
|
<body> <h1 id="greeting">Hello</h1> <!-- load Dojo --> <script src="../../dojo-release-1.11.2-src/dojo/dojo.js" data-dojo-config="async: true"></script> </body> |
引入dojo.js与引入其它的javascript脚本是一样的。但是引入dojo时,有两种模式:同步、异步。异步模式是按需加载,同步方式时一次性加载。
在指定加载方式时,可以有两种指定方式:编程式、声明式。上面的例子是一个声明式,下面来一个编程式:
|
<!-- set Dojo configuration, load Dojo --> <script> dojoConfig= { has: { "dojo-firebug": true }, parseOnLoad: false, foo: "bar", async: true }; </script> <script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script> <script> // Require the registry, parser, Dialog, and wait for domReady require(["dijit/registry", "dojo/parser", "dojo/json", "dojo/_base/config", "dijit/Dialog", "dojo/domReady!"] , function(registry, parser, JSON, config) { // Explicitly parse the page parser.parse(); // Find the dialog var dialog = registry.byId("dialog"); // Set the content equal to what dojo.config is dialog.set("content", "<pre>" + JSON.stringify(config, null, "\t") + "```"); // Show the dialog dialog.show(); }); </script> <!-- and later in the page --> <div id="dialog" data-dojo-type="dijit/Dialog" data-dojo-props="title: 'dojoConfig / dojo/_base/config'"></div> |
详情参见:
https://dojotoolkit.org/documentation/tutorials/1.10/dojo_config/index.html
2.2 指定dojo模块位置
引入dojo.js后,就要加载各种模块进行开发了。那么dojo的各个模块的位置在哪呢?

在使用dojo时,有一个全局配置dojoConfig,它有各个属性,需要了解一下。在了解各个配置项之前,先来了解一下dojo的目录:

dojo: 基本的dojo模块包。
dojox:dojox的扩展模块包。
dijit:提供的各种widget包。
themes:主题包。
util:工具包。
ex:这个是我自己加上的,是用于放置自定义模块目录的。
每个目录下的放置的都是一些模块,在dojo中,每个模块都是一个javascript文件:
下面简单的描述一下dojoConfig的配置项:
·baseUrl:指定加载各模块时基于哪个位置。·packages:是一个数组。数组中每一项都指定一个包名。
Name代表包名。location代表包的位置,是相对于baseUrl的。

例如上面例子中指定的,那么要加载dom模块。
写法是require([‘dojo/dom’],function(dom){});
在加载时,根据模块名称:dojo/dom,依据packages将dojo换成.,再拼接上baseUrl就成了:”../../dojo-release-1.11.2-src/dojo/./dom.js”。如果要加载“dijit/Dialog”,最终会解析成:”../../dojo-release-1.11.2-src/dojo/../dijit/Dialog.js”。
·async: 是配置是否采用异步加载模块的方式
·parseOnLoad:是否启用自动解析。这个属性下面会说明。
想要了解更多配置项,可以参考:
https://dojotoolkit.org/documentation/tutorials/1.10/dojo_config/index.html
2.3 模块加载require:
引入dojo.js后,就创建了两个全局的函数:require,define:
require是用于加载指定的module。

|
<script type="text/javascript" src="../../dojo-release-1.11.2-src/dojo/dojo.js" data-dojo-config="async: true"></script> <script type="text/javascript"> console.log(require); console.log(define); require(["dojo/main", "dojo/on", "dojo/_base/array"], function(main, on, array){ console.log(main); console.log(on); console.log(array); }); </script> |
Define 则是定义Dojo模块用的。
require、define 详情参见:
https://dojotoolkit.org/documentation/tutorials/1.10/modules/index.html
在一个模块的js文件中,最终都要返回一个值(一个对象、一个function等)。譬如:dojo/dom模块提供的是一个对象,这个对象有三个方法:

查看某个模块的详情可以查看dojo官方提供的API:
3、查找DOM节点
3.1 根据id查找dom节点
dom.byId(id, document) 。它其实就相当于document.getElementById(id)

3.2 根据css选择器查找节点
dojo/query 可以用来查找多个dom节点,返回一个NodeList。查找节点时,可以通过!来指定相应的选择器引擎。使用sizzle引擎,这个引擎也是jquery使用的引擎。

3.3 查找widget
registry.byId

4、Event 注册监听器
使用require/define引入dojo/on后,就可以使用on来注册事件监听器了。
require([“dojo/on”], function(on){
on(btn,”click”,function(){
//xxxx
});
});
5、声明式使用Dojo
在dojo中,有两种使用方式:编程式、声明式。编程式,就是使用JavaScript去创建对象,查找节点、绑定事件等。声明式则是在HTML元素上使用data-dojo-type属性来声明对象,绑定事件等。
譬如要创建一个Button,如果使用编程方式,就是要:
Require([“dijit/form/Button”,”dojo/on”], function(Button,on){
var btn= new Button();
on(btn,”click”,function(){
//xxxx
});
});
如果使用声明方式创建Button并绑定click成了:

data-dojo-type:指定创建的对象的类型。
data-dojo-props:指定创建对象时使用的option。
声明方式是如何工作的呢?
在Dojo中,有这样一个模块:dojo/parser,它就是用来解析声明方式,创建对象(包括widget),绑定方法的。Parser.parse() 是用来解析页面的; 如果在dojoConfig中配置了parseOnLoad为false,就需要手动的调用该方法来解析页面。
从上面的demo中,也可以看出可以通过<script type=”dojo/on” />来注册监听器。其实在Dojo中,可以使用script来做很我事呢:
·dojo/on 使用它,就相当于调用了on(target, eventType, eventHandler).
target:就是 包括该<script />的那个HTML上data-dojo-type指定的那个类型的对象。
eventType:是通过script的data-dojo-event来指定的。
eventHandler:就是<script >中间的部分。这会被封装成一个Function。该function的参数,可以通过data-dojo-args来指定。
·dojo/method 使用它可以重写对象的方法。
使用它时,如果指定了data-dojo-event,则该脚本片段对应的方法,会在创建对象后执行一次。如果指定了data-dojo-event,则认为是重写了该类的由data-dojo-event指定的方法。方法参数仍然是用data-dojo-args来表示。
·dojo/aspect:相当于使用了dojo/aspect。Dojo提供的面向切面编程的方式。
·dojo/watch :参见Dojo文档
·dojo/connect:参见Dojo文档。
有关声明式使用Dojo的方式,可以参见文档:
https://dojotoolkit.org/documentation/tutorials/1.10/declarative/index.html
作为一个Dojo初学者,了解这么多已经足够使用Dojo、维护Dojo项目了。如果想对Dojo有更深入的了解,可以根据Dojo官方文档来学习。
Dojo: Quick Start的更多相关文章
- dojo.js --dojo Quick Start/dojo入门手册1
我看了http://www.cnblogs.com/mylem/archive/2009/11/11/1600984.html这篇博客以后 ,就开始设计自己的代码,其实很多解释都是在我的代码里,所以就 ...
- Using dojo/query(翻译)
In this tutorial, we will learn about DOM querying and how the dojo/query module allows you to easil ...
- 开始使用DOJO(翻译)
http://dojotoolkit.org/documentation/tutorials/1.10/start/index.html 我怎么开始学习DOJO?文档在哪?我如何获取支持和培训?我应该 ...
- Configuring Dojo with dojoConfig - The Dojo Toolkit
转载自Dojo官网 Configuring Dojo with dojoConfig The dojoConfig object (formerly djConfig) allows you to s ...
- Dojo Style Guide
Contents: General Quick Reference Naming Conventions Specific Naming Conventions Files Variables Lay ...
- [算法]——快速排序(Quick Sort)
顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...
- AngularJs2与AMD加载器(dojo requirejs)集成
现在是西太平洋时间凌晨,这个问题我鼓捣了一天,都没时间学英语了,英语太差,相信第二天我也看不懂了,直接看结果就行. 核心原理就是require在AngularJs2编译过程中是关键字,而在浏览器里面运 ...
- Dojo前端开发框架与jQuery前端开发框架,对比分析总结
最近Dojo和jQuery双双发布了最新的1.8版本,有着相同版本号的两个Javascript库也有许多核心的相同之处:相同的资源加载机制AMD.相同的选择器 引擎Sizzle等.作为业界知名的Jav ...
- Quick Cocos (2.2.5plus)CoinFlip解析(MenuScene display AdBar二次封装)
转载自:http://cn.cocos2d-x.org/tutorial/show?id=1621 从Samples中找到CoinFlip文件夹,复制其中的 res 和 script 文件夹覆盖新建工 ...
随机推荐
- CSharpGL(21)用鼠标拾取、拖拽VBO图元内的点、线或本身
CSharpGL(21)用鼠标拾取.拖拽VBO图元内的点.线或本身 效果图 以最常见的三角形网格(用GL_TRIANGLES方式进行渲染)为例. 在拾取模式为GeometryType.Point时,你 ...
- ActiveMQ5.14.1+Zookeeper3.4.9高可用伪分布式部署
本文借鉴http://www.cnblogs.com/gossip/p/5977489.html,在此基础上进行了完善,使之成为一个完整版的伪分布式部署说明,在此记录一下! 一.本文目的 ...
- 解析大型.NET ERP系统 高质量.NET代码设计模式
1 缓存 Cache 系统中大量的用到缓存设计模式,对系统登入之后不变的数据进行缓存,不从数据库中直接读取.耗费一些内存,相比从SQL Server中再次读取数据要划算得多.缓存的基本设计模式参考下面 ...
- 手动制作微信h5分享活动页面
现在网上有很多自动制作h5宣传页的网站,可以通过传图,点几下鼠标就可以制作一个集动画.生产二维码等各种功能于一身的h5微信宣传页.对于运营来讲,非常方便,没有技术门槛,不足之处就是只有特定的动画效果, ...
- 网站实现微信登录之回调函数中登录逻辑的处理--基于yii2开发的描述
上一篇文章网站实现微信登录之嵌入二维码中描述了如何在自己的登录页面内嵌入登录二维码,今天的这篇文章主要是描述下在扫码成功之后微信重定向回网站后登录逻辑的处理,其实也就是验证身份信息,授权用户登录的逻辑 ...
- WebComponent魔法堂:深究Custom Element 之 从过去看现在
前言 说起Custom Element那必然会想起那个相似而又以失败告终的HTML Component.HTML Component是在IE5开始引入的新技术,用于对原生元素作功能"增强& ...
- Jquery中的bind(),live(),delegate(),on()绑定事件方式
博客转载为作者:枫上善若水http://www.cnblogs.com/xilipu31/p/4105794.html 前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到d ...
- 让Lua支持Linq吧
第一次接触Linq是在使用C#的时候,这种语法,在处理列表数据非常方便.如果想了解Linq的更多内容可以百度一下Linq,不过你不了解也没关系,让我在Lua中给你展示一下Linq的魅力.简单点说,Li ...
- shiro的使用1 简单的认证
最近在重构,有空学了一个简单的安全框架shiro,资料比较少,在百度和google上能搜到的中文我看过了,剩下的时间有空会研究下官网的文章和查看下源码, 简单的分享一些学习过程: 1,简单的一些概念上 ...
- c3p0连接数据库的3种方式
c3p0连接数据库的3种方式,这里以mysql为例 1. 直接用set方法设置参数, 基本方法 ComboPooledDataSource dataSource = new ComboPooledDa ...