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

/_examples/slider/page/slide/js/view/rocket.subview.slide_pageslider.js

https://github.com/zhoumm1008/rocket
JavaScript | 228 lines | 167 code | 46 blank | 15 comment | 16 complexity | 43ba5c75040e37f523eda9031f9f6e72 MD5 | raw file
  1. (function($){
  2. rocket.subview.slide_pageslider = rocket.subview.extend({
  3. // @todo: 强调view管理本身的el和className等,不跨级管理,做到分而治之
  4. className: 'slide-page-content-pageslider'
  5. ,events: {
  6. 'click .markdown-slide-navigator-left': 'onnavigatingleft'
  7. ,'click .markdown-slide-navigator-right': 'onnavigatingright'
  8. }
  9. ,template: _.template($('#template_slide_news').text())
  10. ,init: function(options){
  11. var me = this;
  12. // 用于页面切换时,避免重复请求数据
  13. me.isFirstLoad = true;
  14. // @todo: 可用于终端适配
  15. // 展现配置
  16. me.itemsPerRow = 2;
  17. me.rowsPerPage = 3;
  18. me.title = options.title;
  19. me.sliderIndex = options.sliderindex - 0;
  20. // 从跨页面model获取数据
  21. me.sectionCount = 0;
  22. me.section = null;
  23. me.fetchSectionData();
  24. me.hideLoading(-1);
  25. me.render();
  26. }
  27. ,render: function(){
  28. var me = this,
  29. section = me.section;
  30. if(me.section){
  31. me.$el.html(me.template({
  32. type: section[0].type == 'docinfo'
  33. ? 'cover' : 'main'
  34. ,section: me.section
  35. }));
  36. }
  37. else{
  38. if(!me.$('.slide-page-content-nocontenttip').length){
  39. me.$el.html($([
  40. '<div class="slide-page-content-nocontenttip">'
  41. ,'幻灯数据没有加载喔,先加载大纲看看:'
  42. ,'<a href="#">'
  43. ,me.title
  44. ,'</a>'
  45. ,'</div>'
  46. ].join('')));
  47. }
  48. }
  49. me.el.setAttribute('data-feature', me.featureString);
  50. me.hideLoading();
  51. return me;
  52. }
  53. ,registerEvents: function(){
  54. var me = this, ec = me.ec;
  55. me.$el.on('swipeDown', function(e){
  56. me.gooutlinepage();
  57. });
  58. me.$el.on('swipeLeft', function(e){
  59. me.gonext();
  60. });
  61. me.$el.on('swipeRight', function(e){
  62. me.goprev();
  63. });
  64. ec.on('keydown', me.onkeydown, me);
  65. }
  66. ,unregisterEvents: function(){
  67. var me = this, ec = me.ec;
  68. me.$el.off('swipeLeft swipeRight swipeDown keydown');
  69. }
  70. ,onsubpagebeforechange: function(params){
  71. var me = this, ec = me.ec,
  72. from = params.from,
  73. to = params.to,
  74. param = params.params,
  75. featureString = me.getFeatureString(param);
  76. if(to == me.ec){
  77. // 仅当参数与当前子页面参数吻合才响应
  78. if(me.featureString == featureString ){
  79. // 重新获取数据并渲染,针对直接访问无数据,再次访问的情况
  80. if(!me.section){
  81. me.fetchSectionData();
  82. me.render();
  83. }
  84. me.$el.show();
  85. }
  86. }
  87. }
  88. ,onsubpageafterchange: function(params){
  89. var me = this, ec = me.ec,
  90. from = params.from,
  91. to = params.to,
  92. param = params.params,
  93. featureString = me.getFeatureString(param);
  94. if(to == me.ec){
  95. // 仅当参数与当前子页面参数吻合才响应
  96. if(me.featureString != featureString ){
  97. // me.$el.hide();
  98. }
  99. }
  100. }
  101. ,fetchSectionData: function(){
  102. var me = this,
  103. instance
  104. = rocket.collection.outline_sections
  105. .getInstance(me.title);
  106. me.section = instance
  107. ? instance.getSection(me.sliderIndex)
  108. : null;
  109. me.sectionCount = instance
  110. ? instance.getSectionCount()
  111. : 0;
  112. }
  113. ,onnavigatingleft: function(e){
  114. this.goprev();
  115. }
  116. ,onnavigatingright: function(e){
  117. this.gonext();
  118. }
  119. ,onkeydown: function(params){
  120. var me = this,
  121. target = params.target,
  122. key = params.key;
  123. // @note: 仅当活动子页面才响应
  124. if(me == target
  125. && me.ec.$el.css('display') == 'block'){
  126. switch(key){
  127. // 'left arrow' key
  128. case 37:
  129. me.goprev();
  130. break;
  131. // 'right arrow' key
  132. case 39:
  133. me.gonext();
  134. break;
  135. // 'up arrow' key
  136. case 38:
  137. me.gooutlinepage();
  138. break;
  139. }
  140. }
  141. }
  142. ,goprev: function(){
  143. var me = this,
  144. prev = me.sliderIndex - 1;
  145. prev =
  146. prev < 1 ? 1 : prev;
  147. Backbone.history.navigate(
  148. '#slide'
  149. + '/' + encodeURIComponent(me.title)
  150. + '/' + prev
  151. , {trigger: true}
  152. );
  153. }
  154. ,gonext: function(){
  155. var me = this,
  156. next = me.sliderIndex + 1;
  157. next =
  158. next > me.sectionCount ?
  159. me.sliderIndex
  160. : next;
  161. Backbone.history.navigate(
  162. '#slide'
  163. + '/' + encodeURIComponent(me.title)
  164. + '/' + next
  165. , {trigger: true}
  166. );
  167. }
  168. ,gooutlinepage: function(){
  169. var me = this;
  170. Backbone.history.navigate(
  171. '#outline'
  172. + '/' + encodeURIComponent(me.title)
  173. , {trigger: true}
  174. );
  175. }
  176. ,onorientationchange: function(from, to){
  177. var me = this;
  178. // me.setDisplayOptions(to);
  179. // me.render(null, null, true);
  180. }
  181. });
  182. })(Zepto);