dojo使用笔记: 自定义ConfirmDialog
前言:
dojo1.10已经有了原生的ConfirmDialog
做gui应用开发,肯定要用到"确认"对话框, 无论是winForm, swing,还是web,也不管理你用什么技术. 在web开发中很多成熟的开发套件中肯定会有"确认对话框"这个组件, 但是如果你用dojo的话, 那就有点可惜了, 因为它没有, 如果因为这个事你很生气, 那是可以理解的, 因为大家都很生气, 所有在dojo官网的FAQ中,就有人问:
Dojo FAQ: Does Dijit have a confirm dialog?
当然, dojo的作者们有自己的理由:
No, Dijit does not provide pre-configured dialogs, like alert, confirm, or prompt.
Why? As simple as these may seem on the surface, each organization or application often needs something subtly different in terms of layout, appearance, behavior, events, and internationalization. Dojo and Dijit provide all the elements you need to make a variety of dialogs, including
dijit/Dialog
,dijit/form/Button
,dojo/on
,dojo/Deferred
anddojo/i18n
.
他们的解释的大概意思就是: 你们要的东西自己构建起来很简单的, 我们都给你们开发了这么多组件, 自己拼拼不会啊, 你们真是伸手党. 况且, 这个玩艺也没法做公用的啊, 每个公司都有自己的需求和界面.
我只能说,你妹啊, 我就想要个基本功能的就行了, 而且我是个新手菜鸟啊, 还得想怎么样开发一个. 牢骚发完了, 事还得做, 嗯 . 开始吧.
代码:
我要的东西很简单, 如下:
就是一个弹出确认框, 有两个按钮.
define([
"dojo/_base/declare",
"dijit/Dialog",
"dijit/_Widget",
"dijit/_TemplatedMixin",
"dijit/_WidgetsInTemplateMixin",
"dojo/text!./templates/ConfirmDialog.html",
"dojo/json",
"dojo/_base/lang",
"dojo/on",
"dojo/aspect",
"dijit/form/Button"
],function(
declare, Dialog, _Widget, _TemplatedMixin, _WidgetsInTemplateMixin,
template, json, lang, on, aspect
){
var DialogContentPane = declare([_Widget, _TemplatedMixin, _WidgetsInTemplateMixin], { //........... 1
templateString: template
}); var dialog = declare(Dialog, { //........... 2
title: "警告",
message: "您确认吗?",
preventCache: true,
constructor: function(kwArgs){
lang.mixin(this, kwArgs); this.content = new DialogContentPane({parentDialog: this}); //.............. 3
},
startup: function(){
this.inherited(arguments);
var _this = this;
on(this.content.cancelButton, "click", function(evt){//............ 4
_this.hide();
_this.no();
});
var signal = aspect.after(_this, "onHide", function(){//............. 5
signal.remove();//......... 6
_this.destroyRecursive();//........... 7
}); },
onExecute: function(){//................8
this.yes();
}
}); return dialog;
});
代码说明:
我们需要一个要满足我们需求的Dialog, 但是不用从头构建一个, 所以这里直接继承了"dijit/Dialog", 如代码中 (2) 处. 为了构建出提示内容和两个按钮的界面, 我们要定义dialog的content属性. 见代码(2)处, 我们把自定义的widget实例赋值给content属性. 下面来看一下这个界面模板内容:
<div> <div class="dijitDialogPaneContentArea">
<div data-dojo-attach-point="contentNode">${parentDialog.message}</div>
</div> <div class="dijitDialogPaneActionBar"> <button data-dojo-type="dijit.form.Button" type="submit">
OK</button> <button data-dojo-type="dijit.form.Button"
data-dojo-attach-point="cancelButton">Cancel</button> </div> </div>
这个内容很简单, 就是显示要提示的信息(message变量), 还定义了两个按钮.
代码(4)的作用是绑定cancel按钮的click事件, 当点击这个按钮时, 我们要隐藏dialog, 并执行回调函数no()方法. 这个回调函数后面会提到. 代码(5)处, 我们拦截了onHide()方法,目的是当dialog隐藏时一定要销毁该dialog所占用的资源. 这是因为当dialog调用hide()方法时, 只是简单的把style的display置为none而也, 如果不销毁的话, 可能会引起内存溢出. 代码(6)处是取消本次拦截. 代码(7)处是调用dialog的销毁自己资源的方法. 代码(8)是监听dialog中确认按钮(OK)的点击事件, 它调用yes的回调方法.
至此, 整个Dialog的定义已经结束, 下面看下我们怎么使用:
var cd = new ConfirmDialog({
message: "您确定删除此分组?",
yes: function(){
alert("yes...");
},
no: function(){
alert("no...");
}});
cd.show();
跟使用dijit/Dialog一样, 创建一个实例, 但是这里要定义两个回调用方法: yes()和no(), 分别是给用户点击了"OK"还是"Cancel"按钮时调用的. 比如, 我们一般可以在这个yes方法里进行一样ajax操作,如果远程删除服务器资源.
结束.
参考引用:
http://stackoverflow.com/questions/10401512/dojo-dialog-with-confirmation-button/10405938#10405938
http://jsfiddle.net/wkydY/205/
dojo使用笔记: 自定义ConfirmDialog的更多相关文章
- Dojo初探之2:设置dojoConfig详解,dojoConfig参数详解+Dojo中预置自定义AMD模块的四种方式(基于dojo1.11.2)
Dojo中想要加载自定义的AMD模块,需要先设置好这个模块对应的路径,模块的路径就是这个模块的唯一标识符. 一.dojoConfig参数设置详解 var dojoConfig = { baseUrl: ...
- iOS学习笔记-自定义过渡动画
代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...
- dojo框架笔记
一.模块定义 1.定义只含值对,没有任何依赖的模块(moudle1.js) define({ color: "black", size: "unisize" } ...
- Angular JS 学习笔记(自定义服务:factory,Promise 模式异步请求查询:$http,过滤器用法filter,指令:directive)
刚学没多久,作了一个小项目APP,微信企业号开发与微信服务号的开发,使用的是AngularJS开发,目前项目1.0版本已经完结,但是项目纯粹为了赶工,并没有发挥AngularJS的最大作用,这几天项目 ...
- dojo 加载自定义module的路径问题
因为最近想学学ArcGIS API for JavaScript ,翻了下ESRI的官网guide,发现其是基于dojo框架的,看了两页实在看不懂,于是先来熟悉下dojo框架.人蠢不能怪社会%> ...
- [Java] JSP笔记 - 自定义标签
自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...
- iOS阶段学习第33天笔记(自定义标签栏(UITabBar)介绍)
iOS学习(UI)知识点整理 一.自定义标签栏 1.方法一 单个创建标签栏 #import "AppDelegate.h" #import "SecondViewCont ...
- AngularJS笔记--自定义指令
在前端开发中, 我们会遇到很多地方都会用到同一种类型的控件.AngularJS提供了自定义指令功能,我们可以在指令里面定义特定的html模板.提供给前台html调用. 一. 指令的简单定义. 下面定 ...
- JavaScript学习笔记-自定义集合类
//集合类Set( ES6标准才有的类,目前兼容性较差)//自定义集合类:extend = function (o,p){ //定义一个复制对象属性的类函数 for(var x in p){ o[x] ...
随机推荐
- svn搭建,很简单
yum install subversion 2015年1月7日15:23:07 我测试的时间 系统是centos6.5 直接yum,centos是可以直接解决apr apr-util 依赖问题,如果 ...
- CodeForces 625A 思维
题意是说一个人喝酒 有两种办法 买塑料瓶的 a块钱 喝了就没了 或者是买玻璃瓶的b块钱 喝完还能卖了瓶子c块钱 求最多能喝多少瓶 在开始判断一次 a与b-c的关系 即两种方式喝酒的成本 如果a< ...
- [学习笔记]ESXI学习记录
vmware workstation环境下,可以为虚拟机添加多块网卡.在虚拟机上单击右键,settings 界面,选中network adapter,然后通过custom选项,可以将多个不同的虚拟机使 ...
- 【转载】存储scale-up和scalce-out架构
转自:存储scale-up和scalce-out架构 存储scale-up和scalce-out架构 Scale-up,即纵向扩展架构.从下面的拓扑图我们可见,纵向扩展是利用现有的存储系统,通过不断增 ...
- PHP 开发 APP 接口 学习笔记与总结 - 静态缓存
存储静态缓存即把缓存写入文件. file.php <?php class Cache{ //静态缓存文件后缀名 const EXT = 'txt'; //定义缓存文件存放路径 private $ ...
- directX基础学习系列7 网格(自己创建)
D3DXMesh 以及 D3DXPMesh都是从ID3DXBaseMesh类中集成,mesh基本是对三角单元进行操作 ID3DXBaseMesh主要函数: HRESULT DrawSubset( DW ...
- 20145317彭垚 《Java程序设计》第一次实验实验报告
20145317彭垚 <Java程序设计>第一次实验实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验名称:Java开发环境的 ...
- ArcGIS Server 服务迁移、恢复
服务迁移与恢复 如果服务可以迁移,那么备份迁移所需文件,即可恢复原服务,所以"服务的迁移与恢复"."服务的备份"问题可以汇总为一个问题"怎样迁移服务. ...
- Java中只有按值传递,没有按引用传递!
今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java ...
- python 输出乱码
在Python中有两种默认的字符串:str和unicode.在Python中一定要注意区分“Unicode字符串”和“unicode对象”的区别.后面所有的“unicode字符串”指的都是python ...