目的:在web设计器中使用command模式实现动作的撤销和重做
当前的一些设想:
1、构建能够支持单一应用的 application 组件,只能支持一种editor。
2、application 组件中注册、执行、撤销和重做command,约定一些特定的执行规则,执行参数的使用方式。
$('body',document).application('registerCommand','addTransition',{
getTitle:function(){
return '新增连线';
},
exec:function(){
var o = this.options;
if(o.event){//鼠标事件驱动的动作,不重复执行操作。
o.event = null;
}else{
$('#editor-workflow').workflow('addTransition',o.fromId,o.toId);
}
},
undo:function(){
var o = this.options;
$('#editor-workflow').workflow('removeTransition',o.fromId,o.toId);
}
});
3、在workflow组件中提供鼠标的动作的命令集成
$('#editor-workflow').workflow({
moveCommand:function(event,ui){
$('body',document).application('executeCommand','move',$.extend({
event:event
},ui));
},//集成鼠标动作的move命令
addTransitionCommand:function(event,ui){
$('body',document).application('executeCommand','addTransition',$.extend({
event:event
},ui));
}//集成鼠标动作的addTransition命令
});
(function($) {
$.widget("youi.application", {
_init:function(){
this.commands = [];//执行过的的命令数组,供撤销使用
this.undoCommands = [];//撤销过的命令数组,供重做使用
this.registedCommands = [];//map
this.element.addClass('youi-application');
this._defaultHtml();
},
_defaultHtml:function(){
//TODO 增加其他的html
var preHtmls = ['<div id="application-info" class="application-info"></div>'];
this.element.prepend(preHtmls.join(''));
},
/* 系统执行命令相关函数 **/
executeCommand:function(command,options){
if(typeof(command)=='string'){
options = $.extend({},command.defaults,options);
command = $.extend({options:options},this.registedCommands[command]);
}
this.commands.push(command);
this.exec();
this.undoCommands = [];//清空重做项
},
/**
* 执行命令
*/
exec:function(isRedo){
if(this.commands.length>0){
var command = this.commands[this.commands.length-1];
command.exec(isRedo);
$.youi.log.info('执行动作:'+command.getTitle());
}
},
/**
* 撤销
*/
undo:function(){
if(this.commands.length>0){
var undoCommand = this.commands.pop();
undoCommand.undo();
this.undoCommands.push(undoCommand);
$.youi.log.info('撤销动作:'+undoCommand.getTitle());
}
},
/**
* 重做
*/
redo:function(){
if(this.undoCommands.length>0){
var redoCommand = this.undoCommands.pop();
this.commands.push(redoCommand);
this.exec(true);
$.youi.log.info('重做动作:'+redoCommand.getTitle());
}
},
/**
* 注册命令
*/
registerCommand:function(name,command){
this.registedCommands[name] = command;
},
/**
* 销毁
*/
destroy:function(){
//TODO
}
});
$.extend($.youi.application,{
defaults:{
menu :'',
toolbar :'',
propertyTable:'',
type :''//dialog page
}
});
})(jQuery);
分享到:
相关推荐
【Java个人简历模板4.doc】是一个Java开发者的简历,展示了其在Java开发领域的专业知识和实践经验。简历中的关键技能和经验如下: 1. **基础Java知识**:开发者精通Java初级技术,如反射、泛型和代理,同时有面向...
- 单例,命令,工厂,工厂方法,观察者,模板,外观,访问者,状态,装饰器,桥接,DAO,责任链等:理解和应用设计模式。 掌握这些技术和框架将使你成为一位全面的J2EE程序员,能够适应各种企业级项目的挑战。不断...
5. **MVC模式**:模型-视图-控制器的设计模式,常用于Web应用开发。 6. **前端技术**: - **JavaScript**:客户端脚本语言,用于增强网页交互性。 - **jQuery**:简化JavaScript操作的库。 - **AJAX**:异步...
- **其他技能**:熟悉JBPM工作流、Lucene和Compass全文搜索引擎,懂得Web Service和POI,能使用SVN和Maven工具,掌握Linux基本命令。 4. **项目经历**: - 参与裕隆佳田商贸综合管理系统开发,采用Spring+...
在项目开发和管理上,他熟练使用SVN和Maven,也熟悉Linux常用命令。 在大数据处理领域,王强熟悉Hadoop分布式数据集群的部署和配置,理解HDFS和MapReduce的工作机制,具备初步的Hadoop应用开发能力。他还了解淘宝的...
- **Struts2**:基于MVC模式的Web框架,支持多种插件扩展。 - **Hibernate**:ORM框架,用于简化数据库操作,提供了一套面向对象的方式来操作关系型数据库。 #### Hibernate - **基本操作**:了解Hibernate的CRUD...
5. **MVC模式**:深入理解MVC(模型-视图-控制器)开发模式,这是许多Web应用框架的基础,如Struts和SpringMVC。 6. **Struts 2框架**:熟练使用Struts 2,包括其高级特性如拦截器、结果集、值栈、OGNL、表单验证和...
- **导入**:使用mysql命令或直接导入SQL文件。 ##### jdbc分段批量提交的时候出现异常怎么处理? - 使用try-catch块捕获异常。 - 在catch块内回滚事务。 - 可以使用日志记录错误详情。 ##### jdbc批量处理数据 -...
他还熟练使用POI进行文档处理,熟悉SVN和Maven作为项目管理和构建工具,并能使用Linux常用命令。 在大数据处理领域,景鑫熟悉Hadoop体系架构,能部署和配置Hadoop分布式数据集群,理解HDFS和MAP-REDUCE的工作机制,...
在其他技能方面,他精通JBPM工作流技术,熟悉Lucene和Compass全文搜索引擎,了解Web Service技术,擅长使用POI开发,能熟练操作SVN和Maven等项目管理工具,并熟悉Linux常用命令。 在大数据处理方面,张三熟悉Hadoop...
他/她具备面向对象编程思维,并对多种Java设计模式有深入理解,如单例、装饰、策略、模板、工厂和观察者模式。在Java Web方面,他/她精通JSP、Servlet、Filter、Listener、Cookie、Session、EL表达式和JSTL,同时也...
6. **其他技能**:精通JBPM工作流,熟悉Lucene和Compass全文搜索引擎,了解Web Service技术,熟练使用POI,掌握SVN和Maven项目管理工具,熟悉Linux常用命令。 7. **大数据处理技能**:具备大数据处理知识,熟悉...
在项目开发工具方面,他熟练使用SVN和Maven,对Linux常用命令也有一定了解。 在大数据处理领域,景鑫熟悉Hadoop体系结构,能部署配置分布式数据集群,理解HDFS和MapReduce工作机制,具备基于Hadoop的应用开发能力。...
总的来说,景鑫是一位全面的JavaEE软件工程师,具有扎实的技术基础和实践经验,尤其在Web开发、数据库管理和工作流集成方面表现突出,同时对大数据处理也有所涉猎。他的技能组合和项目经验表明他能够在复杂的软件...