一 dojo.moduleUrl(module,url)
在模块开发中,可能要引用外部的资源文件,如图片,css文件等。通过dojo.moduleUrl(module,url)可以把模块内一个相对于模块的路径转换为实际访问路径,参数module表示模块名称,url是相对于模块的路径,返回一个dojo._url对象,如dojo.moduleUrl("example","image/log.jpg")表示的路径是js/example/image/log.jpg.
二 混入(mixin)和dojo.extend
在有些时候,需要用一个 JavaScript 对象来扩展另外一个 JavaScript 对象的功能,即把一个 JavaScript 对象混入到另外一个对象中。dojo.mixin()方法提供了这样的能力。该方法接受多个 JavaScript 对象作为参数,并按照参数从右到左的顺序依次混入。第一个参数表示的对象将包含其它参数对象中的全部属性。对于名称相同的属性,右边参数对象的值将覆盖左边参数对象中对应的值。dojo.mixin()的一个常见用法是处理选项的默认值。应用一般来说会为选项提供默认值,用户则会提供自定义的值。实际使用的值应该是用户提供的值覆盖默认值之后的结果。代码清单 11中给出了 dojo.mixin()的一个示例。
清单 11. dojo.mixin() 示例
var defaultOptions = {
lang : "zh_CN",
maxLength : 100
};
function getOptions(userOptions) {
return dojo.mixin({}, defaultOptions, userOptions);
}
getOptions({
lang : "en"
});
在 代码清单 11中,dojo.mixin()的第一个参数是个新创建的空 JavaScript 对象。这样的好处是返回的结果是一个新创建的对象,不会对已有对象造成无意的修改。
其它方法
除了 dojo.declare()和 dojo.mixin()之外,Dojo 基本库还提供其它几个方法,具体的介绍如下。
dojo.extend(constructor, props):该方法把 props中所有的属性和方法都添加到 constructor的原型(prototype)中。这些属性和方法对 constructor的所有实例都是可见的。
dojo.delegate(obj, props):该方法会返回一个新的对象。该对象包含 props中的属性和方法。当在该对象中找不到某个属性的时候,会继续在 obj对象中进行查找。
dojo.getObject(name, create, context):该方法用来从 context对象中获取名为 name的属性。name属性支持类似 com.example.abc这样的“.”分隔的形式。如果指定参数 create的值为 true,当属性 name不存在的时候,会创建该属性并设置其值为空对象。不指定 context对象时默认为全局对象 dojo.global。
dojo.setObject(name, value, context):在对象 context中创建名称为 name,值为 value的属性。属性 name同样支持“.”分隔的形式。不指定 context对象时默认为全局对象 dojo.global。
dojo.exists(name, obj):判断对象 obj中是否包含属性 name。属性 name同样支持“.”分隔的形式。不指定 obj对象时默认为全局对象 dojo.global。
三 dojo.connect
使用dojo.connect()添加事件处理器是很方便的,不用再考虑跨浏览器的问题了。但要想正确地使用这个方法,仍然要注意几个问题:
1、用dojo.byId()获取的是dom元素,而用dijit.byId()获取的是dojo widget,这两点是有根本不同的。
2、事件名称的大小写很关键,如果对dom元素添加事件处理器,事件名称要小写,例如click事件,可以用click或者onclick都行,但一定要把c字母小写;如果对dojo widget添加事件处理器,事件名称必须符合dojo的规范,例如click事件,一定要写成onClick,字母o是小写,而字母c一定要大写。
3、如果要对某个页面元素添加事件处理器,一定要根据这个元素是dom元素还是dojo widget,分别使用dojo.byId()或dijit.byId()来获取元素引用。如果乱用,那么结果可能会添加失败或出现不正常的情况。
注意以上这几个问题,正确使用好dojo.connect()方法是没有问题的。
例一:
<button id=”btn”>Click Me!</button>
<script type=”text/javascript”>
dojo.connect(dojo.byId(‘btn’), ‘onclick’, null, handler);
</script>
例二:
<button id=”btn” dojoType=”dijit.form.Button” label=”Click Me!”></button>
<script type=”text/javascript”>
dojo.connect(dijit.byId(‘btn’), ‘onClick’, null, handler);
</script>
四 认识dojo的界面控件dijit
下拉框:dijit.form.FilteringSelect
http://dojotoolkit.iteye.com/blog/764797
dijit.form.ComboBox
http://www.ibm.com/developerworks/cn/web/wa-lo-dojointro5/
五 页面部分区域遮挡,DialogUnderlay
记得dijit.Dialog吧,当打开一个Dialog的时候会将页面全部遮挡住,用户不能操作。前一段时间有个网友跟我提起部分遮挡怎么实现的问题。当时没有时间写,现在写写吧。
其实使用的也是Dialog里面的内容。这个类叫dijit.DialogUnderlay()
下面发一个例子吧:
<html>
<head>
<title>Button Widget Dojo Tests</title>
<style type="text/css">
@import "../js/dojo/resources/dojo.css";
@import "../js/dijit/themes/tundra/tundra.css";
.tab1{
margin:0px;
padding:0px;
}
</style>
<script type="text/javascript"
djConfig="parseOnLoad: true, isDebug: true"
src="../js/dojo/dojo.js"></script>
<script language="javascript" src="../js/dijit/dijit.js"></script>
<script type="text/javascript">
dojo.require("dijit.Dialog");
function bkifm(){
var d=dojo.byId("div1");
var pos=dojo.contentBox(d);
var bg=new dijit.DialogUnderlay();
//这里需要重写一下layout函数
bg.layout=function(){
var is = this.node.style,
os = this.domNode.style;
os.top = d.offsetTop + "px";
os.left = d.offsetLeft + "px";
is.width = 300 + "px";
is.height = d.offsetHeight + "px";
is.backgroundColor="#666666";
}
bg.show();
//自动隐藏遮罩
dojo.fadeOut({node:bg.domNode,duration:3000,onEnd:function(){bg.node.style.display="none";}}).play();
}
</script>
</head>
<body class="tundra">
<div id="div1">
<table id="tab1" width="300px" border="0" cellspacing="0" cellpadding="0" style="margin:0px;padding:0px;display:inline;">
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>7</td>
</tr>
</table>
</div>
<button onClick="bkifm()">ifrm</button>
</body>
</html>
六 dojo.palce
dojo.place移动dom结点
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>dojo.place移动dom结点</title>
<meta http-equiv='Content-Type' content='text/html;charset=utf-8' />
<script type='text/javascript' src='../dojo/dojo.js'></script>
<script type='text/javascript'>
var handle = function() {
dojo.query('#btn').connect('onclick' , function(){
//参数1 - 需要被被动的结点
//参数2 - 移动到哪个结点的
//参数3 - 被移动的位置
dojo.place('n2' , 'n1' , 'after') ;
});
dojo.query('#btn2').connect('onclick' , function(){
//参数1 - 需要被被动的结点
//参数2 - 移动到哪个结点的
//参数3 - 被移动的位置
dojo.place('n2' , 'hr' , 'after') ;
});
};
dojo.addOnLoad(handle);
</script>
</head>
<body>
<button id='btn'>移动结点</button><br/><br/>
<button id='btn2'>移动结点回原来位置</button>
<div id='n1'>结点1</div>
<div id='n3'>结点3</div>
<hr id='hr'/>
<div id='n2'>结点2</div>
</body>
</html>
七 Dojo中的dojoAttachPoint
在 Dojo declaration 和 Dojo template 中,经常见到 dojoAttachPoint="xxx" 这种语句,经过查文档,终于有了些理性的认识。
其实就是可以在JavaScript中用this.xxx来引用这个元素。
举例说明如下:
<thead dojoAttachPoint="head">
<tr dojoAttachPoint="headRow"></tr>
</thead>
如果想在 js 中修改 thead 、tr 时,就可以通过 dojoAttachPoint 指定的别名 head , headRow 来引用到 thead , tr ,从而可以操作它。更深层地理解,就是 thead , tr 在页面的 DOM 树上分别对应着 DOM Node ,JS 操作 DOM 树时,要得到 DOM node 的实例时,才能对其进行操作。
比如在上面示例的表格中,要增加一个 td 结点时,就要得到 tr 的 instance,然后对其操作;在 JS 中实现的代码如下:
var tth = document.createElement("th");
this.headRow.appendChild(tth);
其实就是可以用this.headRow来引用
其实这和设置id,然后通过byId拿到dom节点也没有什么区别,只不过这样方便一点而已
八.Dojo中this.inherited(arguments)
在dojo中,你会经常遇到 this.inherited(arguments)。这个是一个dojo的内部方法,用来向基类查找该代码所在的方法,然后调用它,直到知道为止。
九.dojo.Defered
dojo提供dojo.Defered来对异步操作进行抽象,如果一个方法是异步执行的,就可以用一个dojo.Defered作为返回值,对于异步操作典型的方法就是对他添加回调方法。当异步操作完成的时候,回调方法会被调用来执行特定的处理逻辑。
十.dojo.formToObject
用来获取整个forma请求的数据:
Adding a new Player
var button = dijit.byId("addPlayerBtn");
dojo.connect(button, "onClick", function(event){
.... event.preventDefault();
event.stopPropagation();
var data = dojo.formToObject("addPlayerForm");
var team = teams[data.team];
data.team = team;
data = dojo.toJson(data);
var xhrArgs = {
postData: data,
handleAs: "json",
load: function(data) {
alert("Player added: " + data);
dojo.byId("gridContainer").innerHTML = "";
loadPlayers();
},
error: function(error) {
alert("Error! " + error);
},
url: "/SoccerOrg/resources/players",
headers: { "Content-Type": "application/json"}
};
var deferred = dojo.xhrPost(xhrArgs);
});
分享到:
相关推荐
基于S7-300PLC与MCGS6.2的饮料罐装生产线自动化控制系统设计,包含仿真、程序、IO表与电气原理,实现自动操作、灌装报警及瓶数记录功能。,基于PLC的饮料罐装生产线控制系统设计。 S7-300PLC MCGS6.2仿真 仿真,程序,IO表,电气原理图,6500字说明。 实现功能有: (1)系统通过开关设定为自动操作模式,一旦启动,则传送带的驱动电机启动并一直保持到停止开关动作或罐装设备下的传感器检测到一个瓶子时停止;瓶子装满饮料后,传送带驱动电机必须自动启动,并保持到又检测到一个瓶子或停止开关动作。 (2)当瓶子定位在灌装设备下时,停顿1秒,罐装设备开始工作,灌装过程为5秒钟,罐装过程应有报警显示,5秒后停止并不再显示报警。 (2)用两个传感器和若干个加法器检测并记录空瓶数和满瓶数,一旦系统启动,必须记录空瓶和满瓶数,设最多不超过99999999瓶。 (4)可以手动对计数器清零(复位)。 ,关键词:S7-300PLC; MCGS6.2仿真; 传送带驱动电机; 传感器检测; 瓶装; 空瓶数; 满瓶数; 报警显示; 自动操作模式; 灌装设备。,基于S7-300PLC的饮料罐装
python加密货币时间序列预测源码+数据集-最新出炉 加密货币分析: 对各种加密货币的数据进行分析和研究。可能会使用到从各种来源收集的数据,包括但不限于加密货币的价格、市值、交易量、交易时间等信息。 探索加密货币市场的趋势和模式,例如价格的波动情况、不同加密货币之间的相关性等。 数据处理与操作: 可能使用 Python 语言(Kaggle 上常用的数据分析语言),并运用一些数据处理和分析的库,如 pandas 用于数据的读取、清洗、整理和转换操作,将原始的加密货币数据转换为更易于分析的格式。 可视化展示: 通过可视化工具,如 matplotlib 或 seaborn 库,将加密货币的信息以图表的形式展示出来,以帮助直观地理解数据中的关系和趋势。 统计分析或预测: 可能会进行一些基本的统计分析,如计算加密货币价格的均值、中位数、标准差等统计量,以描述数据的特征。 或者使用机器学习或时间序列分析的方法对加密货币的价格进行预测,根据历史数据预测未来价格走势。 例如,使用 scikit-learn 进行简单的回归分析: 数据挖掘与特征提取: 挖掘加密货币数据中的特征,如找出影响价格的关键因素,对数据中的特征进行筛选和提取,以帮助更好地理解加密货币的市场行为。
类和对象、继承、封装、多态、接口、异常
gee python相关教程
夜间灯光强度(平均灯光强度)的高低反映了一个地区城市化发展的水平,平均灯光强度越高,说明该地区城市群越多,城市化程度越高。夜间灯光数据现在越来越广泛地应用于经济增长分析、经济地理、城市经济学、数字经济等众多领域。 本数据包括三套: [1]中国类DMSP-OLS灯光数据1992-202 [2]中国超长序列灯光数据1984-2020 [3]全球类NPP-VIIRS夜间灯光数据2000-2022 包括:全国各省、市、县夜间灯光数据 矫正后夜间灯光数据 细分:标准差、平均值、总值、最大值和最小值
工程项目总监绩效考核表
首先解释一下什么叫转移支付。其实,这和养老金的中央调剂是一样的。 每年,地方都要向中央缴纳财政。而中央又要根据各地方的财政实力,给予转移支付。比如一些经济弱省,本身财政收入就不够支出的,还得上交一部分给中央,怎么维持财政运转?由于各省市直接的财政收入能力存在差异,中央为实现各个地方的公共服务水平平等,于是便有了财政转移支付制度。 简单理解就是富省养穷省。 2022年全国一般预算内财政收入203703亿元,给地方转移支付了97144.75亿元,转移支付数额创下新高。
基于门控卷积和堆叠自注意力的离线手写汉字识别算法研究.pdf
【数据介绍】 作为第二大人类部门用水,高质量的工业用水格网数据对于水资源研究和管理至关重要。中国工业用水格网数据(China Industrial Water Withdrawal dataset, CIWW)基于超过 40 万家企业数据、月度工业产品产量数据和连续工业用水统计数据制作得到的一套1965-2020年逐月中国工业用水数据集,其空间分辨率为 0.1°和 0.25°。数据集包括工业用水、企业数量和企业生产总值(辅助数据)等变量,可被用于水文、地理学、环境、可持续发展等方面科学研究。 【数据来源】 数据来源为《中国经济普查年鉴》(省级工业取水量、工业产出)、《中国工业企业数据库》(企业地理位置、产值)、《中国工业产品产量数据库》(工业产品月生产量),以及《中国水资源公报》和(Zhou et al, 2020, PNAS)的工业用水量数据。 【数据处理】 首先通过2008年企业分布数据、经济普查年鉴中分省分部门的工业用水量和工业产值计算得到分省分部门工业用水效率和工业产品产量数据,得到了2008年逐月工业用水数据。然后结合中国水资源公报和相关文献中省级工业用水数据,以2008年工业用水的时空格局作为基础分配工业用水数据,最终得到1965-2020年逐月工业用水的格网数据。详细方法见High-resolution mapping of monthly industrial water withdrawal in China from 1965 to 2020 (Hou et al, 2024, ESSD). 将数据集与统计数据记录和其他数据集进行了验证,结果表示在时间尺度和空间尺度上都与统计数据具有一致性,相比已有工业用水数据有更好的精度。
65 -质量管理部经理绩效考核表1
11 -电脑部经理绩效考核表1
内容概要:本文提供了针对大学生英语竞赛写作准备的重要资源——一系列通用的英文句子模板。这些模板涵盖了现代经济社会的各种话题,从科技进步到环境保护,以及个人品质和社会责任等,并且适用于论述类文章、观点对比和个人见解的表达。文章通过对每一句话的应用环境解释和语法提示,确保使用者可以在实际写作中正确且有效地应用这些表达方式。 适合人群:正在准备参加大学生英语竞赛的学生及其他希望提高书面表达能力的学习者。 使用场景及目标:考生能够在竞赛时间内迅速构建思路完整的文章,增强语言表达的流利性和规范性;帮助学习者积累高级词汇,提升英语写作水平并培养良好的思维逻辑。 阅读建议:结合历年优秀范文进行深入学习,熟悉不同类型话题下的表述方法;练习将提供的句子融入自身创作的文章中,通过不断修订和完善来巩固记忆。同时也可以用于日常的英语写作训练当中。
法律事务专员绩效考核表
1、文件内容:apache-commons-digester-javadoc-1.8.1-19.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apache-commons-digester-javadoc-1.8.1-19.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
永磁同步电机磁场定向控制(矢量控制)Simulink仿真模型波形展现与解析,永磁同步电机的磁场定向控制(矢量控制)simulink仿真模型,波形完美 ,核心关键词:永磁同步电机; 磁场定向控制(矢量控制); Simulink仿真模型; 波形完美;,永磁同步电机矢量控制仿真模型:磁场完美调控,波形精确无误
07 -储运部经理绩效考核表1
OQC检验员(成品出货检验员)绩效考核表
基于Matlab2020b的电机控制算法:无传感FOC算法Simulink仿真模型及实践指导,定位+电流闭环强拖+ 角度渐变切+ 速度电流双闭环+ 无传感器角度估算SMO+ PLL 控制方式 Simulink 仿真模型 (Matlab2020b版本)以及教授模型搭建 这是一种常用的无传感FOC电机控制算法,掌握这种算法的基本原理,并有仿真模型在手,就可以用它来指导实践中的程序调试,做到实际项目不盲目调试。 模型特点: 1. 所有模块都做到了模块化,各个模块分区清楚,结构清晰。 2. 所有电机和控制参数均在m文件中体现,变量注释清楚,随用随改。 3. 速度环和电流环PI参数均实现自动整定。 4. 模型采用标幺值系统。 5. 各状态切使用stateflow,模型结构清晰。 6.通用表贴和内嵌式电机。 ,定位;电流闭环强拖;角度渐变切换;速度电流双闭环;无传感器角度估算SMO;PLL控制方式;Simulink仿真模型;Matlab2020b版本建模;教授模型搭建;模块化设计;参数自动整定;标幺值系统;Stateflow应用;通用表贴和内嵌式电机。,基于Matlab 2020b的FOC电机