Dojo define、declare

Define

先看define。作用是定义一个模块(module)。这个模块可以被require引用,引用了之后就可以使用define里面的东西。一个模块想当然,里面干什么事情,不一定全部自己实现。就像人要coding,除了脑子,也不能没有电脑、键盘。因此,define的第一个参数就是将要用到的其他模块引进来。第二个参数描述这个模块具体干什么,并且给第一个参数中的模块分别起一个朗朗上口的名字。就像下面这段代码描述的样子。

util.js

define([ "dojo/dom"], function(dom) {
return {
setRed: function(id){
dom.byId(id).style.color = "red";
}
};
});

这是一个工具模块,其中一个功能就是把网页上id对应的DOM节点变成红色。当我们要使用它的时候,就可以用require了。

test.jsp

<script>
require(
[ "dojo/ready", "test/util" ],
function(ready, util) {
ready(function() {
var id = "selected_text";
util.setRed(id);
});
});
</script>

Declare

可以看到,上面的模块util作为工具模块,可以在被引用后任意调用其功能。这是无状态的,就好象是一个singleton的对象。但如果我们想定义“类”一样的东西,有状态,可以创建多个对象,就需要在define里用declare。最典型的例子就是dijit下面的诸多UI小控件。

举个很简单的例子,我希望基于dijit.Dialog,创建一个有特殊功能的dialog,每次打开后能把上面的一段text标记为红色。

 RedTextDialog.js

define([ "dojo/_base/declare", "dijit/Dialog", "dijit/_WidgetBase",
"dijit/_TemplatedMixin", "test/util" ], function(declare,
Dialog, _WidgetBase, _TemplatedMixin, util) {
return declare("test.RedTextDialog", [ Dialog, _WidgetBase, _TemplatedMixin ], {
title: "Dialog with Red Text",

onDownloadEnd : function() {
var id = "selected_text";
util.setRed(id);
}
});
});

RedTextDialog可以重写dijit.Dialog所有的方法,也可以自创方法、变量,实现自己想要的任意功能。接下来可以用require使用它。

<script>
require(
[ "dojo/ready", "test/RedTextDialog" ],
function(ready, RedTextDialog) {
ready(function() {
var dialog = new RedTextDialog();
dialog.show();
});
});
</script>

时间: 2025-01-03 22:28:41

Dojo define、declare的相关文章

Oracle变量定义的三种方式(define,variable,declare)学习笔记

1.define(即host变量) Host变量主要作用是起到一个替代变量的作用,是主机环境可以和oracle进行交互的一个媒介. 通过define定义host变量的时候必须指定变量名和变量的值,如果变量名已经存在于host变量中,则自动覆盖,这个值不可以指定类型,一律按char存储. DEFINE 变量只在当前session环境中有效. (1).语法: define variable_name = value (2).声明和初始化DEFINE变量 //声明define变量的时候必须同时初始化赋

ExtJS4 Ext.onReady、Ext.define、Ext.create的区别与联系 http://blog.sina.com.cn/s/blog_48d7f92901011cfn.html

1.Ext.onReady 说明:onReady内的语句块会在页面上下文加载后再执行. 2.Ext.define 说明:创建类,可以继承其他类,也可以被继承. 例子1: <script type="text/javascript"> Ext.onReady(function () { //创建一个类,类名:TextClass,具有两个属性:A.B Ext.define('TextClass', { A: 'a', B: 'b' }); //实例化类 var textClas

我也要这样写define、、

今天在TCO1B看到这位大神的代码,简直醉了,当需要手速的时候可以考虑使用一下.. #define V(x) vector<x > #define vs V(string) #define vi V(int) #define fr(x,y,z) for ((x)=(y);(x)<(z);(x)++) #define fo(x,y) fr(x,0,y) #define fir(n) fo(i,n) #define fjr(n) fo(j,n) #define fkr(n) fo(k,n)

ExtJS4教程—-Ext.onReady、Ext.define、Ext.create基础方法(转)

Ext.onReady 说明:onReady内的语句块会在页面上下文加载后再执行 例子: <html> <head> <title>Index</title> <link href="http://www.cnblogs.com/Scripts/ext-4.0.7-gpl/ext-4.0.7-gpl/resources/css/ext-all.css" rel="stylesheet" type="te

C++ Primer 学习笔记_15_从C到C++(1)--bool类型、const限定符、const与#define、结构体内存对齐

欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 一.bool类型(C语言没有) 1.逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++中为1个字节. 2.声明方式:bool result; result=true; 3.可以当作整数用(true一般为1,false为0) 4.把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false 5.示例 #include <iostream> using namespace

#define、const、typedef的区别

#define 并不是定义变量, 只是用来做文本替换 例如: #define PI 3.1415926 float angel; angel=30*PI/180; 那么,当程序进行编译的时候,编译器会首先将 “#define PI 3.1415926”以后的,所有代码中的“Pi”全部换成 “3.1415926” 然后再进行编译. 我查到一个讲const与#define的差别的帖子,里面谈到const与#define最大的差别在于:前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了.

js中的require、define、export、import【转】

原文链接:https://www.cnblogs.com/libin-1/p/7127481.html 为什么有模块概念 理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Javascript不是一种模块化编程语言,在es6以前,它是不支持”类”(class),所以也就没有”模块”(module)了. require时代 Javascript社区做了很多努力,在现有的运行环境中,实现”模块”的效果. 原始写法 模块就是实现特定功能的一组方法.只要把不同的函数(

`define、parameter、localparam三者的区别

`define: 可以跨模块的定义,写在模块名称上面,在整个设计工程都有效.一旦'define指令被编译,其在整个编译过程中都有效.例如,通过另一个文件中的`define指令,定义的常量可以被其他文件中被调用.直到遇到 'undef: `define data 8'd14 使用时则为 `data parameter: 本module内有效的定义,可用于参数传递: 在模块内部定义时无法进行参数传递, 若在模块名后照下面这样写则可以进行传递 module rxtx#(parameter baud =

dojo.byId、dojo.query、dojo.attr

                     dojo.byId   dojo.query   dojo.attr   1.dojo.byId实例 dojo.byId 2.dojo.query实例 dojo.byId 3.dojo.attr实例 dojo.byId