PageRenderTime 43ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/5.0/guides/event-custom/index.html

https://github.com/kissyteam/kissyteam.github.com
HTML | 209 lines | 199 code | 10 blank | 0 comment | 0 complexity | 2df111d7a060b3cee99e52aac28852ba MD5 | raw file
Possible License(s): Apache-2.0
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1,user-scale=no">
  6. <title>Guides - KISSY v5.0 Documentation</title>
  7. <link rel="shortcut icon" href="/5.0/assets/img/favicon.ico">
  8. <link rel="stylesheet" type="text/css" href="/5.0/assets/css/base.css">
  9. <link rel="stylesheet" type="text/css" href="/5.0/assets/css/main.css">
  10. <link rel="stylesheet" type="text/css" href="/5.0/assets/css/github.css"/>
  11. <script type="text/javascript" src="http://g.tbcdn.cn/kissy/edge/2014.09.05/seed.js" data-config="{combine:true}"></script>
  12. </head>
  13. <body>
  14. <div class="header">
  15. <div class="inner">
  16. <div class="toolbar">
  17. <a href="/5.0">
  18. <img class="mini-logo" src="/5.0/assets/img/mini-logo.png">
  19. </a>
  20. <ul class="nav clearfix">
  21. <li class="docs">
  22. <span>
  23. Docs
  24. <b class="caret"></b>
  25. </span>
  26. <ul>
  27. <li><a href="/5.0/guides/">Guides</a></li>
  28. <li><a href="/5.0/api">Api Docs</a></li>
  29. <li><a href="/5.0/demos">Demos</a></li>
  30. </ul>
  31. </li>
  32. <li class="more">
  33. <span>
  34. More
  35. <b class="caret"></b>
  36. </span>
  37. <ul>
  38. <li><a href="/5.0/more/faq.html">FAQ</a></li>
  39. <li><a href="http://gallery.kissyui.com/">Gallery</a></li>
  40. <li><a href="http://blog.kissyui.com/">KISSY Blog</a></li>
  41. <li><a href="https://github.com/daxingplay/kmc">KMC</a></li>
  42. <li><a href="https://github.com/minghe/generator-bee/wiki/generator-bee%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B">Generator</a></li>
  43. </ul>
  44. </li>
  45. <li class="split"></li>
  46. <li class="nav-other"><a href="/5.0/quick-start.html">Quick Start</a></li>
  47. <li class="nav-other"><a href="https://github.com/kissyteam/kissy">Contribute</a></li>
  48. <li class="nav-other"><a target="_blank" href="/5.0/kissyup-middle.html">KISSY UP</a></li>
  49. </ul>
  50. </div>
  51. <div class="search">
  52. <script>
  53. (function() {
  54. var cx = '003618533255763067140:5nkycw1pbey';
  55. var gcse = document.createElement('script');
  56. gcse.type = 'text/javascript';
  57. gcse.async = true;
  58. gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
  59. '//www.google.com/cse/cse.js?cx=' + cx;
  60. var s = document.getElementsByTagName('script')[0];
  61. s.parentNode.insertBefore(gcse, s);
  62. })();
  63. </script>
  64. <gcse:search></gcse:search>
  65. </div>
  66. </div>
  67. </div>
  68. <div class="main">
  69. <div class="guide">
  70. <div class="logo-on-top clearfix">
  71. <img src="/5.0/assets/img/logo-on-top.png">
  72. </div>
  73. <div class="inner clearfix">
  74. <div id="sidebar">
  75. <a class="link-apidocs btn btn-primary" href="../../api/classes/CustomEvent.html">API Docs</a>
  76. <div class="panel panel-primary">
  77. <div class="panel-heading">
  78. <h3 class="panel-title">Outline</h3>
  79. </div>
  80. <div class="panel-body">
  81. <ul class="outline">
  82. <li class="level2"><a href="#简单引用">简单引用</a></li><li class="level2"><a href="#自定义事件简单示例">自定义事件简单示例</a></li><li class="level2"><a href="#继承Base的类成员可以自定义事件">继承Base的类成员可以自定义事件</a></li>
  83. </ul>
  84. </div>
  85. </div>
  86. <div class="panel panel-primary ajax-load ">
  87. <div class="panel-heading">
  88. <h3 class="panel-title">Features</h3>
  89. </div>
  90. <div class="panel-body">
  91. <p><a href="../../guides/event-custom/index.html">event-custom 模块基本介绍</a></p>
  92. </div>
  93. </div>
  94. <div class="panel panel-primary ajax-load hide">
  95. <div class="panel-heading">
  96. <h3 class="panel-title">Demos</h3>
  97. </div>
  98. <div class="panel-body">
  99. </div>
  100. </div>
  101. </div>
  102. <div id="main-content">
  103. <p></p>
  104. <h1 id="event-custom 模块基本介绍">event-custom 模块基本介绍</h1><p>event-custom 模块事先自定义事件功能只要将 CustomEvent.Target 混合Util.mix Util.augment进想要自定义事件的对象那么这个对象就可以进行自定义事件了</p>
  105. <h2 id="简单引用">简单引用</h2><pre><code><span class="hljs-built_in">require</span>([<span class="hljs-string">'event-custom'</span>], <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(CustomEvent)</span></span>{
  106. <span class="hljs-comment">//use CustomEvent...</span>
  107. })
  108. </code></pre><h2 id="自定义事件简单示例">自定义事件简单示例</h2><pre><code><span class="hljs-built_in">require</span>([<span class="hljs-string">'util'</span>, <span class="hljs-string">'event-custom'</span>], <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(Util, CustomEvent)</span></span>{
  109. <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Dog</span><span class="hljs-params">(name)</span></span>{
  110. <span class="hljs-keyword">this</span>.name = name;
  111. }
  112. Util.augment(Dog, CustomEvent.Target, {
  113. shout : <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{
  114. <span class="hljs-keyword">this</span>.fire(<span class="hljs-string">'shout'</span>,{
  115. content : <span class="hljs-string">'I am hungry...'</span>
  116. });
  117. }
  118. });
  119. <span class="hljs-keyword">var</span> myDog = <span class="hljs-keyword">new</span> Dog(<span class="hljs-string">'cuteDog'</span>);
  120. myDog.on(<span class="hljs-string">'shout'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(ev)</span></span>{
  121. alert(<span class="hljs-keyword">this</span>.name + <span class="hljs-string">'say that '</span> + ev.conent);
  122. });
  123. myDog.shout();
  124. })
  125. </code></pre><h2 id="继承Base的类成员可以自定义事件">继承Base的类成员可以自定义事件</h2><p>事件本身是一个抽象概念和平台无关和设备无关更和浏览器无关浏览器只是使用事件的方法来触发特定的行为进而触发某段网页逻辑而常见的DOM事件诸如click,dbclick是浏览器帮我们实现的特定行为而这里的特定行为就是触发事件的时机是可以被重新定义的原理上事件都是需要精确的定义的比如下面这个例子我们定义了一个新事件初始化1秒后</p>
  126. <p>这里我们使用Base内嵌的事件对象来描述</p>
  127. <pre><code><span class="hljs-comment">// 为了便于理解,这里用 define 写成模块将代码隔离开</span>
  128. <span class="hljs-comment">// 实现Klass内部的自定义事件</span>
  129. define(<span class="hljs-string">'klass'</span>,<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(Base)</span></span>{
  130. <span class="hljs-comment">// Klass 是一个类,它在被实例化后1秒会触发一个事件"afterOneSecond"</span>
  131. <span class="hljs-keyword">var</span> Klass = Base.extend({
  132. initializer:<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{
  133. <span class="hljs-keyword">var</span> <span class="hljs-keyword">self</span> = this;
  134. <span class="hljs-comment">// Your Code</span>
  135. setTimeout(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{
  136. <span class="hljs-keyword">self</span>.fire(<span class="hljs-string">'afterOneSecond'</span>,{
  137. a:<span class="hljs-number">1</span>,b:<span class="hljs-number">2</span> <span class="hljs-comment">//挂两个回调属性</span>
  138. });
  139. },<span class="hljs-number">1000</span>);
  140. }
  141. },{<span class="hljs-comment">/*ATTRS*/</span>});
  142. <span class="hljs-keyword">return</span> Klass;
  143. },{
  144. requires:[<span class="hljs-string">'base'</span>]
  145. });
  146. <span class="hljs-comment">// 绑定自定义事件</span>
  147. <span class="hljs-keyword">require</span>(<span class="hljs-string">'klass'</span>,<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(S,Klass)</span></span>{
  148. <span class="hljs-comment">// 初始化这个类</span>
  149. <span class="hljs-keyword">var</span> k = <span class="hljs-keyword">new</span> Klass();
  150. <span class="hljs-comment">// 绑定事件监听</span>
  151. k.on(<span class="hljs-string">'afterOneSecond'</span>,<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(e)</span></span>{
  152. alert(<span class="hljs-string">'1秒后触发这里的逻辑'</span>);
  153. <span class="hljs-comment">// e.a === 1</span>
  154. <span class="hljs-comment">// e.b === 1</span>
  155. });
  156. });
  157. </code></pre><p>这是一个很纯粹的自定义事件Base组件内置自定义事件机制它有事件名称afterOneSecond有事件的触发条件<code>self.fire(&#39;afterOneSecond&#39;)</code>有事件的绑定<code>k.on(&#39;afterOneSecond&#39;)</code>这样这个事件就能顺利的发生并被成功监听在代码组织层面一般<code>Klass</code>类中实现了事件命名定义和实现属于内聚的功能实现而绑定事件时可以是Klass这段代码的用户他不会去关心事件的具体实现只要关心Klass&quot;暴露了什么事件可以让我绑定&quot;就可以了这就是KISSY中使用自定义事件的用法你可以通过Base来创建自定义事件</p>
  158. </div>
  159. </div>
  160. </div>
  161. </div>
  162. <div class="footer">
  163. <div class="wrap-disqus">
  164. <div class="top-repeat"></div>
  165. <div id="disqus_thread"></div>
  166. </div>
  167. <script>
  168. if((window.location.hostname.indexOf("kissyui.com")!=-1 )&& window.localStorage.getItem("kissy-commment")!="0"){
  169. /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
  170. var disqus_shortname = 'kissy-docs'; // required: replace example with your forum shortname
  171. // The following are highly recommended additional parameters. Remove the slashes in front to use.
  172. //var disqus_identifier = '/anim';
  173. //var disqus_url = window.location;
  174. /* * * DON'T EDIT BELOW THIS LINE * * */
  175. (function() {
  176. var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
  177. dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
  178. (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  179. })();
  180. }
  181. </script>
  182. <div class="other-page">
  183. <div class="wrap">
  184. <div class="content">
  185. <div class="wrap-content">
  186. <p>@2010 - 2112 KISSY UI LIBARAY</p>
  187. <div class="github-msg">
  188. <iframe src="http://ghbtns.com/github-btn.html?user=kissyteam&repo=kissy&type=watch&count=true"
  189. allowtransparency="true" frameborder="0" scrolling="0" width="100" height="20"></iframe>
  190. <iframe src="http://ghbtns.com/github-btn.html?user=kissyteam&repo=kissy&type=fork&count=true"
  191. allowtransparency="true" frameborder="0" scrolling="0" width="100" height="20"></iframe>
  192. </div>
  193. </div>
  194. </div>
  195. </div>
  196. </div>
  197. </div>
  198. </body>
  199. </html>