SlideShare a Scribd company logo
1 of 27
脚本组件 聊一聊脚本组件的设计和编码 Rank work@youa WED Team, Baidu Blog: www.never-online.net
什么是脚本组件? 对象管理小组( Object Management Group, OMG) 的“建模语言规范”中将组件定义为:“系统中一种物理的、可代替的部件、它封装了实现并提供了一系列可用的接口。一个组件代表一个系统中实现的物理部分,包括软件代码(源代码,二进制代码,可执行代码)或者一些类似内容,如脚本或者命令文件。”
[object Object],需求
function  Alert (title, msg) { var  mask   = document.createElement('div'); var  alertBox  = document.createElement(...); var  title   = document.createElement(...); var  content   = document.createElement(...); var  close   = document.createElement(...); mask.className  = 'mask'; alertBox.className = 'alertbox'; title.className  = 'title'; content.className  = 'content'; mask.style.display  = 'block'; alertbox.style.display = 'block'; } Alert ('rank', 'test');
Reuse&Encapsulation 设计  重用 & 封装  的组件
function  Alert (title, msg) { this.title = title; this.msg  = msg; var mask  = document.createElement('div'); var alertBox = document.createElement('div'); var content  = document.createElement('div'); var title  = document.createElement('div'); this. setTitle  = function(title) { return this.title = title; }; this. setMsg   = function(msg) { { return this.msg = msg; }; this. show   = function() { }; return this; }; var instanceAlert = new  Alert ('rank','test'); instanceAlert. show (); 假设有一个类继承了 Alert 类,子类也有一个 setTitle 方法,那么就不好复用父类的代码了。
建议 如果你想重用的代码,请放在 prototype 原型 上。
function  Alert (title, msg) { this.init.apply(this, arguments); }; Object.mix( Alert .prototype, (function(){ return { init  : function(title, msg){}, setTitle  : function(title) {}, setMsg  : function(msg) {}, show  : function() {} } })()); var instanceAlert = new  Alert (‘rank’,’test’); instanceAlert. show ();
人无远虑,必有近忧 我们能否考虑得长远些呢 ——  设计灵活的组件。
如果我要做一个登录浮层呢? 如果要做一个 confirm 浮层呢?
跳出来再想想,你现在使用的组件里还有哪些象 Alert 组件?
Overlay / Panel —  可浮动的容器。 Dialog LayerPopup LayerPopup Alert Confirm
If  Panel   is  a base  class . Dialog   has  a  Mask . Dialog   has  a  Popup . LayerPopup   is  a  BasePopup . LayerPopup  has   delayShow ,  delayHide (). BaseLayer   is  a  Panel . BaseLayer   has  a  close  button. BaseLayer   has  a  header . BaseLayer   has  a  footer . BaseLayer   has  a  shadow . BaseLayer   has  a  corner . ……  Alert   is  a  Dialog. Confirm   is  a  Dialog .
——   组件   以  人  为本。 组件接口的设计及重载
一、构造函数 二、 show() 方法 layer. show (); layer. show (x); layer. show (x,y); layer. show (x,y,w); layer. show (x,y,w,h); layer. show (x,y,w,h,HTMLElement); var layer =  new   LayerPopup (HTMLElement); var layer =  new   LayerPopup (HTMLElement, config); var layer =  new   LayerPopup (config); Example render
Example layer = new  LayerPopup ({ close   : true, shadow   : true, cue   : true, corner   : true, width   : 500, height   : 300, useESCKey  : true, useIframe  : true, caption   : ‘title’, content   : ‘<div>test</div>’, className  : ‘panel pupop-t1’, autoPosition : true, delayTime  : 500, });
——   组件   以  人  为本。 接口统一
layer = new  LayerPopup ({ close   : true, shadow   : true, cue   : true, corner   : true, width   : 500, height   : 300, useESCKey  : true, caption   : ‘title’, content   : ‘<div>test</div>’, className  : ‘panel pupop-t1’, autoPosition : true, delayTime  : 500 }); layer. show (); dialog. hide (); dialog = new  Dialog (); dialog. show (); dialog. hide (); MessageBox . alert ({  icon:MB_ICON.SUCCESS,  caption:' 这是个示例的 messagebox', content:' 如果您的浏览器 3 秒内没有自动跳转,请点击这里 '  }).show(); MessageBox . confirm ({  caption:' 这是个示例的 messagebox',  content:' 如果您的浏览器 3 秒内没有自动跳转,请点击这里 '  }).show();
大统一 ——  overlaylize Behavior demo $(‘overlay-box’). overlaylize ({ type   : ‘popup’, delayTime : 2000 }); $(‘overlay-box’). overlaylize ({ type  : ‘dialog’, modal : true, width : 300, useIframe : true });
——   组件不接 业务 活 事件的设计
一、考虑 show() 接口,我要在显示的时候更改一下浮层里的内容。 二、我要在隐藏的时候,加入动画效果。 三、或者…在浮层里的表单未填完,不允许关闭浮层。 dlg = new  Dialog (HTMLElement); dlg. onafterhide  = function(){ dlg. show (); } dlg = new  Dialog (HTMLElement); dlg. onbeforehide  = function(evt){  evt. preventDefault (evt); //animation code here. dlg.fireEvent(‘hide’); } dlg = new  Dialog (HTMLElement); dlg. onbeforshow  = function(evt){  //bussiness code here } AOP  Events ---- Before, after or more.
我想要  Drag   功能… 我想要  Resize   功能… 我想要  自适应  功能… 我想要遮罩层要使用 尽量小 的内存 我想要按 ESC 键关闭浮层… 我想要 多浮层 时能够一个个关闭…
Windows System crash… If problems continue, Remove any demand or disable any one.
Windows  Restart
总结 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
从哪里获得学习的资源
[object Object],!

More Related Content

Viewers also liked

El bosc mediterrani
El bosc mediterraniEl bosc mediterrani
El bosc mediterraniPere Boluda
 
Social Conference 2011
Social  Conference 2011Social  Conference 2011
Social Conference 2011Takashi Ohmoto
 
اختبار هرمي لمادة النحو
اختبار هرمي لمادة النحواختبار هرمي لمادة النحو
اختبار هرمي لمادة النحوahmed
 
Ian downey elevationburger
Ian downey elevationburgerIan downey elevationburger
Ian downey elevationburgerguesta22580
 
Career Path
Career PathCareer Path
Career Pathjohnee3
 
Central park
Central park Central park
Central park bymafe
 
什麼是貧窮
什麼是貧窮  什麼是貧窮
什麼是貧窮 Birgit Lin
 
What Is The Promise Of Marriage
What Is The Promise Of MarriageWhat Is The Promise Of Marriage
What Is The Promise Of Marriagetatianasimpson
 
OMK Camp webinar_09 sample
OMK Camp webinar_09 sampleOMK Camp webinar_09 sample
OMK Camp webinar_09 sampleGeorgene Bender
 
Et dieu crea_la_mer_mad jam
Et dieu crea_la_mer_mad jamEt dieu crea_la_mer_mad jam
Et dieu crea_la_mer_mad jambymafe
 
Συνομήλικοι: του Αρκά!
Συνομήλικοι: του Αρκά!Συνομήλικοι: του Αρκά!
Συνομήλικοι: του Αρκά!bymafe
 
presentazione di TagBoLab a creative clusters, Reggio Emilia
presentazione di TagBoLab a creative clusters, Reggio Emiliapresentazione di TagBoLab a creative clusters, Reggio Emilia
presentazione di TagBoLab a creative clusters, Reggio Emiliatagbologna lab
 
Anil saldhana oasisid_cloud
Anil saldhana oasisid_cloudAnil saldhana oasisid_cloud
Anil saldhana oasisid_cloudAnil Saldanha
 
Atelier territorio tagbocamp
Atelier territorio tagbocampAtelier territorio tagbocamp
Atelier territorio tagbocamptagbologna lab
 
Seip_Project3
Seip_Project3Seip_Project3
Seip_Project3seipje
 
English astronomie
English astronomieEnglish astronomie
English astronomiebymafe
 
Embedding sustainable development strategies in agent
Embedding sustainable development strategies in agent Embedding sustainable development strategies in agent
Embedding sustainable development strategies in agent SORAN2
 
Wayfinding objects mechanism
Wayfinding objects mechanismWayfinding objects mechanism
Wayfinding objects mechanismjianfeng
 

Viewers also liked (20)

El bosc mediterrani
El bosc mediterraniEl bosc mediterrani
El bosc mediterrani
 
Social Conference 2011
Social  Conference 2011Social  Conference 2011
Social Conference 2011
 
اختبار هرمي لمادة النحو
اختبار هرمي لمادة النحواختبار هرمي لمادة النحو
اختبار هرمي لمادة النحو
 
Ian downey elevationburger
Ian downey elevationburgerIan downey elevationburger
Ian downey elevationburger
 
Career Path
Career PathCareer Path
Career Path
 
Central park
Central park Central park
Central park
 
什麼是貧窮
什麼是貧窮  什麼是貧窮
什麼是貧窮
 
What Is The Promise Of Marriage
What Is The Promise Of MarriageWhat Is The Promise Of Marriage
What Is The Promise Of Marriage
 
OMK Camp webinar_09 sample
OMK Camp webinar_09 sampleOMK Camp webinar_09 sample
OMK Camp webinar_09 sample
 
Et dieu crea_la_mer_mad jam
Et dieu crea_la_mer_mad jamEt dieu crea_la_mer_mad jam
Et dieu crea_la_mer_mad jam
 
Συνομήλικοι: του Αρκά!
Συνομήλικοι: του Αρκά!Συνομήλικοι: του Αρκά!
Συνομήλικοι: του Αρκά!
 
presentazione di TagBoLab a creative clusters, Reggio Emilia
presentazione di TagBoLab a creative clusters, Reggio Emiliapresentazione di TagBoLab a creative clusters, Reggio Emilia
presentazione di TagBoLab a creative clusters, Reggio Emilia
 
Anil saldhana oasisid_cloud
Anil saldhana oasisid_cloudAnil saldhana oasisid_cloud
Anil saldhana oasisid_cloud
 
Atelier territorio tagbocamp
Atelier territorio tagbocampAtelier territorio tagbocamp
Atelier territorio tagbocamp
 
Seip_Project3
Seip_Project3Seip_Project3
Seip_Project3
 
English astronomie
English astronomieEnglish astronomie
English astronomie
 
Embedding sustainable development strategies in agent
Embedding sustainable development strategies in agent Embedding sustainable development strategies in agent
Embedding sustainable development strategies in agent
 
Wayfinding objects mechanism
Wayfinding objects mechanismWayfinding objects mechanism
Wayfinding objects mechanism
 
Panzallaria tagbocamp
Panzallaria tagbocampPanzallaria tagbocamp
Panzallaria tagbocamp
 
Bt tuan2
Bt tuan2Bt tuan2
Bt tuan2
 

Similar to JavaScript 脚本控件(二)

Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术bigqiang zou
 
第1讲 开始编写程序
第1讲 开始编写程序第1讲 开始编写程序
第1讲 开始编写程序ruandao
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现hua qiu
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非Tony Deng
 
JavaScript Code Quality
JavaScript Code QualityJavaScript Code Quality
JavaScript Code QualityJoseph Chiang
 
Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试Yiwei Ma
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层yiditushe
 
【 I Love Joomla 】- Joomla!佈景製作教學
【 I Love Joomla 】- Joomla!佈景製作教學【 I Love Joomla 】- Joomla!佈景製作教學
【 I Love Joomla 】- Joomla!佈景製作教學ilovejoomla
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享Chong-Kuan Chen
 
Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)ziggear
 
Api Code Pack For Net Framework
Api Code Pack For Net FrameworkApi Code Pack For Net Framework
Api Code Pack For Net FrameworkChui-Wen Chiu
 
I Love Joomla! 佈景製作教學 0212
I Love Joomla! 佈景製作教學 0212I Love Joomla! 佈景製作教學 0212
I Love Joomla! 佈景製作教學 0212Asika Simon
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训flynofry
 

Similar to JavaScript 脚本控件(二) (20)

Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术
 
第1讲 开始编写程序
第1讲 开始编写程序第1讲 开始编写程序
第1讲 开始编写程序
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非
 
Js培训
Js培训Js培训
Js培训
 
JavaScript Code Quality
JavaScript Code QualityJavaScript Code Quality
JavaScript Code Quality
 
Structs2簡介
Structs2簡介 Structs2簡介
Structs2簡介
 
Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试
 
Les3
Les3Les3
Les3
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层
 
Scala
ScalaScala
Scala
 
【 I Love Joomla 】- Joomla!佈景製作教學
【 I Love Joomla 】- Joomla!佈景製作教學【 I Love Joomla 】- Joomla!佈景製作教學
【 I Love Joomla 】- Joomla!佈景製作教學
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
 
Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)
 
Sun java
Sun javaSun java
Sun java
 
Api Code Pack For Net Framework
Api Code Pack For Net FrameworkApi Code Pack For Net Framework
Api Code Pack For Net Framework
 
I Love Joomla! 佈景製作教學 0212
I Love Joomla! 佈景製作教學 0212I Love Joomla! 佈景製作教學 0212
I Love Joomla! 佈景製作教學 0212
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训
 

More from RANK LIU

Web 前端工程师与成长
Web 前端工程师与成长Web 前端工程师与成长
Web 前端工程师与成长RANK LIU
 
FEX 发展历程-公司化运作
FEX 发展历程-公司化运作FEX 发展历程-公司化运作
FEX 发展历程-公司化运作RANK LIU
 
从学生到工程师
从学生到工程师从学生到工程师
从学生到工程师RANK LIU
 
前后端mvc经验 - webrebuild 2011 session
前后端mvc经验 - webrebuild 2011 session前后端mvc经验 - webrebuild 2011 session
前后端mvc经验 - webrebuild 2011 sessionRANK LIU
 
用户行为系统Marmot - D2 2011 session
用户行为系统Marmot - D2 2011 session用户行为系统Marmot - D2 2011 session
用户行为系统Marmot - D2 2011 sessionRANK LIU
 
Anroid development part.1
Anroid development part.1Anroid development part.1
Anroid development part.1RANK LIU
 

More from RANK LIU (6)

Web 前端工程师与成长
Web 前端工程师与成长Web 前端工程师与成长
Web 前端工程师与成长
 
FEX 发展历程-公司化运作
FEX 发展历程-公司化运作FEX 发展历程-公司化运作
FEX 发展历程-公司化运作
 
从学生到工程师
从学生到工程师从学生到工程师
从学生到工程师
 
前后端mvc经验 - webrebuild 2011 session
前后端mvc经验 - webrebuild 2011 session前后端mvc经验 - webrebuild 2011 session
前后端mvc经验 - webrebuild 2011 session
 
用户行为系统Marmot - D2 2011 session
用户行为系统Marmot - D2 2011 session用户行为系统Marmot - D2 2011 session
用户行为系统Marmot - D2 2011 session
 
Anroid development part.1
Anroid development part.1Anroid development part.1
Anroid development part.1
 

JavaScript 脚本控件(二)

  • 1. 脚本组件 聊一聊脚本组件的设计和编码 Rank work@youa WED Team, Baidu Blog: www.never-online.net
  • 2. 什么是脚本组件? 对象管理小组( Object Management Group, OMG) 的“建模语言规范”中将组件定义为:“系统中一种物理的、可代替的部件、它封装了实现并提供了一系列可用的接口。一个组件代表一个系统中实现的物理部分,包括软件代码(源代码,二进制代码,可执行代码)或者一些类似内容,如脚本或者命令文件。”
  • 3.
  • 4. function Alert (title, msg) { var mask = document.createElement('div'); var alertBox = document.createElement(...); var title = document.createElement(...); var content = document.createElement(...); var close = document.createElement(...); mask.className = 'mask'; alertBox.className = 'alertbox'; title.className = 'title'; content.className = 'content'; mask.style.display = 'block'; alertbox.style.display = 'block'; } Alert ('rank', 'test');
  • 5. Reuse&Encapsulation 设计 重用 & 封装 的组件
  • 6. function Alert (title, msg) { this.title = title; this.msg = msg; var mask = document.createElement('div'); var alertBox = document.createElement('div'); var content = document.createElement('div'); var title = document.createElement('div'); this. setTitle = function(title) { return this.title = title; }; this. setMsg = function(msg) { { return this.msg = msg; }; this. show = function() { }; return this; }; var instanceAlert = new Alert ('rank','test'); instanceAlert. show (); 假设有一个类继承了 Alert 类,子类也有一个 setTitle 方法,那么就不好复用父类的代码了。
  • 8. function Alert (title, msg) { this.init.apply(this, arguments); }; Object.mix( Alert .prototype, (function(){ return { init : function(title, msg){}, setTitle : function(title) {}, setMsg : function(msg) {}, show : function() {} } })()); var instanceAlert = new Alert (‘rank’,’test’); instanceAlert. show ();
  • 12. Overlay / Panel — 可浮动的容器。 Dialog LayerPopup LayerPopup Alert Confirm
  • 13. If Panel is a base class . Dialog has a Mask . Dialog has a Popup . LayerPopup is a BasePopup . LayerPopup has delayShow , delayHide (). BaseLayer is a Panel . BaseLayer has a close button. BaseLayer has a header . BaseLayer has a footer . BaseLayer has a shadow . BaseLayer has a corner . …… Alert is a Dialog. Confirm is a Dialog .
  • 14. —— 组件 以 人 为本。 组件接口的设计及重载
  • 15. 一、构造函数 二、 show() 方法 layer. show (); layer. show (x); layer. show (x,y); layer. show (x,y,w); layer. show (x,y,w,h); layer. show (x,y,w,h,HTMLElement); var layer = new LayerPopup (HTMLElement); var layer = new LayerPopup (HTMLElement, config); var layer = new LayerPopup (config); Example render
  • 16. Example layer = new LayerPopup ({ close : true, shadow : true, cue : true, corner : true, width : 500, height : 300, useESCKey : true, useIframe : true, caption : ‘title’, content : ‘<div>test</div>’, className : ‘panel pupop-t1’, autoPosition : true, delayTime : 500, });
  • 17. —— 组件 以 人 为本。 接口统一
  • 18. layer = new LayerPopup ({ close : true, shadow : true, cue : true, corner : true, width : 500, height : 300, useESCKey : true, caption : ‘title’, content : ‘<div>test</div>’, className : ‘panel pupop-t1’, autoPosition : true, delayTime : 500 }); layer. show (); dialog. hide (); dialog = new Dialog (); dialog. show (); dialog. hide (); MessageBox . alert ({ icon:MB_ICON.SUCCESS, caption:' 这是个示例的 messagebox', content:' 如果您的浏览器 3 秒内没有自动跳转,请点击这里 ' }).show(); MessageBox . confirm ({ caption:' 这是个示例的 messagebox', content:' 如果您的浏览器 3 秒内没有自动跳转,请点击这里 ' }).show();
  • 19. 大统一 —— overlaylize Behavior demo $(‘overlay-box’). overlaylize ({ type : ‘popup’, delayTime : 2000 }); $(‘overlay-box’). overlaylize ({ type : ‘dialog’, modal : true, width : 300, useIframe : true });
  • 20. —— 组件不接 业务 活 事件的设计
  • 21. 一、考虑 show() 接口,我要在显示的时候更改一下浮层里的内容。 二、我要在隐藏的时候,加入动画效果。 三、或者…在浮层里的表单未填完,不允许关闭浮层。 dlg = new Dialog (HTMLElement); dlg. onafterhide = function(){ dlg. show (); } dlg = new Dialog (HTMLElement); dlg. onbeforehide = function(evt){ evt. preventDefault (evt); //animation code here. dlg.fireEvent(‘hide’); } dlg = new Dialog (HTMLElement); dlg. onbeforshow = function(evt){ //bussiness code here } AOP Events ---- Before, after or more.
  • 22. 我想要 Drag 功能… 我想要 Resize 功能… 我想要 自适应 功能… 我想要遮罩层要使用 尽量小 的内存 我想要按 ESC 键关闭浮层… 我想要 多浮层 时能够一个个关闭…
  • 23. Windows System crash… If problems continue, Remove any demand or disable any one.
  • 25.
  • 27.