- 浏览: 688349 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
di1984HIT:
学习了,学习了!
Tomcat的URL中文乱码解决以及传输优化 -
arottenapple:
...
我的二十一天CoreJava 学习笔记 -
黯淡流觞:
...
我的二十一天CoreJava 学习笔记 -
onlyOneToOne:
wsc830719 写道@RequestMapping(val ...
spring mvc3中 ResponseBody中文乱码 -
waj_615:
但是打印订单不是简单的string 啊
用java实现打印功能
原文地址:http://dojotoolkit.org/documentation/tutorials/1.7/declare/
dojo/_base/declare模块是一个创建类的基础模块。他可以用来通过多继承创建灵活的类。dojo,dijit,和dojox都是使用了decalre。
开始
请确保你已经了解了模块的相关知识。
通过dojo创建基本的类
declare功能是在dojo/_base/declare模块中定义的。它接收三个参数className,superClass,properties
ClassName
这个属性声明了一个类名,声明后,名子将被放入到全局范围。className可以使用继承类声明。
有名子的类
// Create a new class named "mynamespace.MyClass" declare("mynamespace.MyClass", null, { // Custom properties and methods here });
被声明为mynamespace.MyClass 的类名已经被放到全局的范围了。
如果一个类要被dojo来解析使用则必需要有类名,另一种类是可以不需要类名的。
匿名类
// Create a scoped, anonymous class var MyClass = declare(null, { // Custom properties and methods here });
MyClass现在能在给定的范围域类使用了
父类
一个类的父类可以是null,一个已经存在的类,也可以是多个已经存在的类。如果有多个父类,则第一个父类将会成为基础类,别的父类将会使用"混合"方式组合。
没有父类
var MyClass = declare(null, { // Custom properties and methods here });
null就表示了这个类没有父类
有一个父类
var MySubClass = declare(MyClass, { // MySubClass now has all of MyClass's properties and methods // These properties and methods override parent's });
MySubClass将会继承于MyClass的属性和方法。父类中的属性和方法可以被重写。
有多个父类
var MyMultiSubClass = declare([ MySubClass, MyOtherClass, MyMixinClass ],{ // MyMultiSubClass now has all of the properties and methods from: // MySubClass, MyOtherClass, and MyMixinClass });
数组就表示这个类有多个父类。从左至右将一个个的继承其父类的属性和方法。第一个类做为基础类,别的类将使用"混合"方法继承。
如果一个属性可方法在多个父类中都存在。那么它将使用最后一个父类的属性或方法。
属性和方法
一个对象可以拥有属性和方法。如果有父类中相同的属性或方法名,则将会重写其属性。
属性和方法示例
// Class with custom properties and methods var MyClass = declare(MyParentClass, { // Any property myProperty1: 12, // Another myOtherProperty: "Hello", // A method myMethod: function(){ // Perform any functionality here return result; } });
示例:类的创建和继承
下面的代码中我们将要创建一个从dijit/form/Button模块继承的类
define([ "dojo/_base/declare", "dijit/form/Button" ], function(declare, Button){ return declare("mynamespace.Button", Button, { label: "My Button", onClick: function(evt){ console.log("I was clicked!"); this.inherited(arguments); } }); });
从上面的代码中,我们可以简单的推断出
- 类名是mynamespace.Button
- 通过模块的return功能,mynamespace.Button这个类可以在全局范围内被引用
- 这个类继承于dijit/form/Button和这个Button类的依赖类。
- 这个类有几个定制的属性和方法。
构造方法
如果类的方法名叫constructor ,这个方法将会在类初始化时被调用。就意味着this这个字将引用到当前实例而不是原类。constructor 方法也可以接收参数。
// Create a new class var Twitter = declare(null, { // The default username username: "defaultUser", // The constructor constructor: function(args){ declare.safeMixin(this,args); } });
下面的代码是创建一个类实例
var myInstance = new Twitter();
在实例中,username如果没有被赋值将会使用默认的"defaultUser"值。通过使用safeMixin 方法可以设置username的值。
var myInstance = new Twitter({ username: "sitepen" });
现在实例的username已经被设置成"sitepen"了
declare.safeMixin在创建和继承类中是很有作用的。在API中是这么介绍的。
"此功能有点像lang._mixin功能,但它将被用于构造函数中。 this.inherited()与declare.safeMixin混在功能,可以像使用正常的方法一样,它可以在构造方法中使用this.inherited()"
declare.safeMixin是创建类时赋参数值的一个好方法。
继承
就像上面所说的,类的继承是从左至右的,并且属性和方法可能会被覆盖
// Define class A var A = declare(null, { // A few properties... propertyA: "Yes", propertyB: 2 }); // Define class B var B = declare(A, { // A few properties... propertyA: "Maybe", propertyB: 1, propertyC: true }); // Define class C var C = declare([mynamespace.A, mynamespace.B], { // A few properties... propertyA: "No", propertyB: 99, propertyD: false });
上面继承类的结果
// Create an instance var instance = new C(); // instance.propertyA = "No" // overridden by B, then by C // instance.propertyB = 99 // overridden by B, then by C // instance.propertyC = true // kept from B // instance.propertyD = false // created by C
this.inherted
全部的重写父类的方法当然是可行的,但有的时候在构造函数中使用继承链可以有效的保护原有的功能。这也就是this.iinherited(XXX)这个方法的作用。这个方法调用了父类中的同名的方法
// Define class A var A = declare(null, { myMethod: function(){ console.log("Hello!"); } }); // Define class B var B = declare(A, { myMethod: function(){ // Call A's myMethod this.inherited(arguments); // arguments provided to A's myMethod console.log("World!"); } }); // Create an instance of B var myB = new B(); myB.myMethod(); // Would output: // Hello! // World!
this.inheried方法可以在子类中的任何时候进行调用。
结论
declare是创建模块所需要的非常重要的方法。重用declare可以重创建出更多更复杂的模块结构。
发表评论
-
dojo封装dialog提示框
2012-06-20 10:20 5658/** * 显示dojo的弹出框.前提是已经引用了相 ... -
dojo封装表单ajax提交
2012-06-20 10:16 1715/** * dojo的ajax提交form(post ... -
封装创建dojo的dialog
2012-06-18 13:55 0/** * 显示dojo的弹出框.前提是已经引用了相 ... -
自定义封装dojo通用ajax提交表单
2012-06-18 13:52 2654/** * dojo的ajax提交form(post ... -
使用dojo的dialog自定义confirm效果
2012-06-18 13:43 5125/** * 使用dojo dialog模拟confi ... -
dojo 制做非模态窗口dialog
2012-06-16 13:27 4330dojo的dialog效果基本上都是模态的,也就是说,在弹出窗 ... -
dojo1.7的加载方法
2012-06-01 17:16 4266对于dojo1.7来说,最大的变化就是引入了AMD异步加载器。 ... -
不翻译DOJO了
2012-05-16 17:57 1104翻译DOJO的时间并不长。总是感觉把老外的话翻译过来很是生硬, ... -
dojo1.7翻译 数组工具(Arrays Made Easy)
2012-05-14 10:55 1972英文地址:http://dojotoolkit.org/ ... -
dojo1.7翻译 Dijit的主题,按钮和文本框(Dijit Themes, Buttons, and Textboxes)
2012-05-03 15:52 2214原文地址:http://dojotoolkit.org/ ... -
dojo1.7翻译 动画效果(Animations)
2012-05-02 12:08 2781原文地址:http://dojotoolk ... -
dojo1.7翻译 动态效果(Dojo Effects)
2012-04-27 10:15 1322原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 处理DOM(Dojo DOM Functions)
2012-04-26 15:51 2538原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 ajax跨域请求(Getting Jiggy with JSONP)
2012-04-25 12:02 3163原文地址:http://dojotoolk ... -
dojo1.7翻译 ajax功能(Ajax with Dojo)
2012-04-24 15:04 1566原文地址:http://dojotoolk ... -
dojo1.7翻译 搜索节点功能(Using dojo/query)
2012-04-23 15:32 1911原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 hello,dojo
2012-04-22 15:21 2164原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 定义模块(Defining Modules)
2012-04-18 17:21 6859原文地址:http://dojotoolkit ... -
dojo1.7翻译 通过dojoConfig来配置dojo
2012-04-18 09:20 5232原文地址:http://dojotoolk ... -
dojo1.7翻译 Hello,World
2012-04-17 10:17 1604原文地址:http://dojotoolkit.org/ref ...
相关推荐
作为Dojo的基础模块,`dojo/_base`包含了许多核心功能,如事件处理、DOM操作、对象创建、定时器、数组操作等。了解并熟练掌握这些基础功能,是使用Dojo进行开发的基础。 三、dojo/query dojo/query类似于jQuery的 `...
2. **dojo/_base**: 这是Dojo的基础模块,包含了Dojo的核心功能,如事件处理、DOM操作、动画效果等。在1.7版本中,这些基础功能被设计得更加高效和易用。 3. **dojo/store**: Dojo 1.7 提供了数据存储抽象层,称为`...
require(["dojo/dom", "dijit/registry", "dojo/parser"], function(dom, registry, parser) { // 在模块加载完成后执行的回调函数 }); </script> ``` - 由于模块拆分,一些核心和dijit模块被分解为更小的部分...
require(["dojo/dom", "dijit/registry", "dojo/parser"], function(dom, registry, parser) { // 当以上模块加载完成后,执行回调函数 function update() { var viewNode = dom.byId("view1"); var view1 = ...
Dojo的DOM操作(dojo/dom, dojo/dom-geometry, dojo/dom-class等)和事件处理(dojo/on)功能强大,使得与页面交互变得简单。 在设计模式方面,书中可能涵盖了常见的如单例模式、工厂模式、观察者模式等。单例模式...
Dojo 是一个强大的JavaScript 库,它为Web 开发提供了丰富的功能和工具,尤其是在构建复杂的、可维护的、高性能的富互联网应用(RIA)时。Dojo 1.7 版本是其历史上的一个重要里程碑,引入了许多改进和优化,包括模块...
这些控件基于 dojo/_base/xdom 和 dojo/dom-class 等模块,实现了丰富的样式和交互功能。通过 `dojo/parser`,我们可以将 HTML 中的标记解析成对应的 Dijit 控件。 ### 3. 数据绑定与数据存储 Dojo 提供了 `dojo/...
`dojo/_base/declare`用于创建类,支持多重继承。 4. **DOM操作**:`dojo/dom`和`dojo/query`模块提供了对HTML元素的选取和操作。`dojo/dom-construct`和`dojo/dom-style`则分别处理元素的创建和样式修改。 5. **...
例如,`dojo/main`是Dojo的核心入口点,`dojo/_base`包含基础功能,如事件处理和对象创建,而`dojo/dom`和`dojo/on`分别用于DOM操作和事件监听。 4. Dojo模块系统:Dojo的`require`函数是加载模块的关键,它接受一...
5. **dojo/Widget**:Dojo提供了丰富的UI组件,如按钮、表单、对话框等,它们都继承自`dojo/_base/widget.Widget`。开发者可以通过`dojo/_base/lang.extend`扩展自定义组件。 6. **dojo/Stateful**:这个基类提供了...
1. **模块化系统**:Dojo的核心是它的模块化系统,即 dojo/_base,它允许开发者按需加载所需的代码,减少页面载入时间和内存占用。Dojo的模块化基于AMD(Asynchronous Module Definition)规范,使得代码组织更为...
在源码中,你可以看到`dojo/_base/declare`、`dojo/_base/lang`等模块,这些都是Dojo的基础架构,用于定义类、处理语言特性等。 深入剖析Dojo工作原理,首先应关注其模块加载机制。Dojo的`dojo/require`和`dojo/...
1. **Dojo核心模块**:Dojo的核心模块包括`dojo/_base`系列,如`dojo/_base/lang`用于语言扩展,`dojo/_base/array`提供数组操作方法,`dojo/_base/event`管理事件处理。了解这些基础模块,能帮助开发者更好地理解和...
3. **数据绑定**:Dojo 提供了`dojo/Stateful` 和 `dojo/_base/declare` 模块,支持面向对象编程和数据绑定。通过声明式绑定,我们可以轻松实现视图与模型的同步。 4. **AJAX通信**:`dojo/xhr` 模块提供了与服务器...
`dojo/_base/kernel`模块中的`dojo/_base/xhr`用于异步请求,可以配合构建系统优化资源加载。 9. **测试框架**:Dojo 1.10.4还包括了测试框架`dojox/testing`,便于开发人员进行单元测试和集成测试。 10. **移动...
这些组件基于dojo/_base/declare创建,具有良好的可定制性和可扩展性。例如,`dijit/form/Button`就是一个常用的组件,可以轻松地在网页上添加交互式按钮。 在数据管理方面,Dojo的`dojo/data`模块提供了多种数据...
DOJO的`dojo/_base/declare`和`dojo/_base/lang`提供了类和函数的声明,有助于编写可维护的代码。此外,DOJO的`dojo/ready`和`dojo/domReady!`可以帮助确保脚本在DOM完全加载后执行,避免加载顺序问题。 9. **DOJO...
本篇文章将详细解析Dojo 1.9 Modules的核心部分之一:`dojo/_base`。此模块包含了对数组操作的增强功能,这些功能在现代浏览器中可能已经内置,但对于老旧浏览器或不支持这些功能的环境来说非常有用。 #### `dojo/_...
(2)打开安装目录>\webapps\arcgis_js_api\library\2.6\arcgis\js\dojo\dojo\dojo.xd.js, 查找 '[HOSTNAME_AND_PATH_TO_JSAPI]', 并替换成 '<myserver>:8080/arcgis_js_api/library/2.6/arcgis/' (3) 打开...
15. **dojo/_base/fx** 和 **dojo/fx**:提供基础和高级的动画效果,如淡入淡出、滑动等。 在开发过程中,通过解压`dojo-release-1.12.2`,开发者可以获得完整的Dojo库,并根据项目需求引入必要的模块,从而构建...