animated-dataview.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. Ext.Loader.setConfig({enabled: true});
  2. Ext.Loader.setPath('Ext.ux.DataView', '../ux/DataView/');
  3. Ext.require([
  4. 'Ext.data.*',
  5. 'Ext.util.*',
  6. 'Ext.view.View',
  7. 'Ext.ux.DataView.Animated',
  8. 'Ext.XTemplate',
  9. 'Ext.panel.Panel',
  10. 'Ext.toolbar.*',
  11. 'Ext.slider.Multi'
  12. ]);
  13. Ext.onReady(function() {
  14. //data to be loaded into the ArrayStore
  15. var data = [
  16. [true, false, 1, "LG KS360", 54, "240 x 320 pixels", "2 Megapixel", "Pink", "Slider", 359, 2.400000],
  17. [true, true, 2, "Sony Ericsson C510a Cyber-shot", 180, "320 x 240 pixels", "3.2 Megapixel", "Future black", "Candy bar", 11, 0.000000],
  18. [true, true, 3, "LG PRADA KE850", 155, "240 x 400 pixels", "2 Megapixel", "Black", "Candy bar", 113, 0.000000],
  19. [true, true, 4, "Nokia N900 Smartphone 32 GB", 499, "800 x 480 pixels", "5 Megapixel", "( the image of the product displayed may be of a different color )", "Slider", 320, 3.500000],
  20. [true, false, 5, "Motorola RAZR V3", 65, "96 x 80 pixels", "0.3 Megapixel", "Silver", "Folder type phone", 5, 2.200000],
  21. [true, true, 6, "LG KC910 Renoir", 242, "240 x 400 pixels", "8 Megapixel", "Black", "Candy bar", 79, 0.000000],
  22. [true, true, 7, "BlackBerry Curve 8520 BlackBerry", 299, "320 x 240 pixels", "2 Megapixel", "Frost", "Candy bar", 320, 2.640000],
  23. [true, true, 8, "Sony Ericsson W580i Walkman", 120, "240 x 320 pixels", "2 Megapixel", "Urban gray", "Slider", 1, 0.000000],
  24. [true, true, 9, "Nokia E63 Smartphone 110 MB", 170, "320 x 240 pixels", "2 Megapixel", "Ultramarine blue", "Candy bar", 319, 2.360000],
  25. [true, true, 10, "Sony Ericsson W705a Walkman", 274, "320 x 240 pixels", "3.2 Megapixel", "Luxury silver", "Slider", 5, 0.000000],
  26. [false, false, 11, "Nokia 5310 XpressMusic", 140, "320 x 240 pixels", "2 Megapixel", "Blue", "Candy bar", 344, 2.000000],
  27. [false, true, 12, "Motorola SLVR L6i", 50, "128 x 160 pixels", "", "Black", "Candy bar", 38, 0.000000],
  28. [false, true, 13, "T-Mobile Sidekick 3 Smartphone 64 MB", 75, "240 x 160 pixels", "1.3 Megapixel", "", "Sidekick", 115, 0.000000],
  29. [false, true, 14, "Audiovox CDM8600", 5, "", "", "", "Folder type phone", 1, 0.000000],
  30. [false, true, 15, "Nokia N85", 315, "320 x 240 pixels", "5 Megapixel", "Copper", "Dual slider", 143, 2.600000],
  31. [false, true, 16, "Sony Ericsson XPERIA X1", 399, "800 x 480 pixels", "3.2 Megapixel", "Solid black", "Slider", 14, 0.000000],
  32. [false, true, 17, "Motorola W377", 77, "128 x 160 pixels", "0.3 Megapixel", "", "Folder type phone", 35, 0.000000],
  33. [true, true, 18, "LG Xenon GR500", 1, "240 x 400 pixels", "2 Megapixel", "Red", "Slider", 658, 2.800000],
  34. [true, false, 19, "BlackBerry Curve 8900 BlackBerry", 349, "480 x 360 pixels", "3.2 Megapixel", "", "Candy bar", 21, 2.440000],
  35. [true, false, 20, "Samsung SGH U600 Ultra Edition 10.9", 135, "240 x 320 pixels", "3.2 Megapixel", "", "Slider", 169, 2.200000]
  36. ];
  37. Ext.define('Mobile', {
  38. extend: 'Ext.data.Model',
  39. fields: [
  40. {name: 'hasEmail', type: 'bool'},
  41. {name: 'hasCamera', type: 'bool'},
  42. {name: 'id', type: 'int'},
  43. 'name',
  44. {name: 'price', type: 'int'},
  45. 'screen',
  46. 'camera',
  47. 'color',
  48. 'type',
  49. {name: 'reviews', type: 'int'},
  50. {name: 'screen-size', type: 'int'}
  51. ]
  52. });
  53. var store = Ext.create('Ext.data.ArrayStore', {
  54. model: 'Mobile',
  55. sortInfo: {
  56. field : 'name',
  57. direction: 'ASC'
  58. },
  59. data: data
  60. });
  61. var dataview = Ext.create('Ext.view.View', {
  62. deferInitialRefresh: false,
  63. store: store,
  64. tpl : Ext.create('Ext.XTemplate',
  65. '<tpl for=".">',
  66. '<div class="phone">',
  67. (!Ext.isIE6? '<img width="64" height="64" src="images/phones/{[values.name.replace(/ /g, "-")]}.png" />' :
  68. '<div style="width:74px;height:74px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'images/phones/{[values.name.replace(/ /g, "-")]}.png\',sizingMethod=\'scale\')"></div>'),
  69. '<strong>{name}</strong>',
  70. '<span>{price:usMoney} ({reviews} Review{[values.reviews == 1 ? "" : "s"]})</span>',
  71. '</div>',
  72. '</tpl>'
  73. ),
  74. plugins : [
  75. Ext.create('Ext.ux.DataView.Animated', {
  76. duration : 550,
  77. idProperty: 'id'
  78. })
  79. ],
  80. id: 'phones',
  81. itemSelector: 'div.phone',
  82. overItemCls : 'phone-hover',
  83. multiSelect : true,
  84. autoScroll : true
  85. });
  86. var phoneSlider = Ext.create('Ext.slider.Multi', {
  87. hideLabel: true,
  88. width : 300,
  89. minValue : 0,
  90. maxValue : 500,
  91. values : [80, 320],
  92. listeners: {
  93. change: {
  94. buffer: 70,
  95. fn : filterData
  96. }
  97. }
  98. });
  99. Ext.create('Ext.panel.Panel', {
  100. title: 'Animated DataView',
  101. layout: 'fit',
  102. items : dataview,
  103. height: 555,
  104. width : 650,
  105. tbar : [
  106. 'Filter phone price:',
  107. ' ',
  108. phoneSlider
  109. ],
  110. renderTo: 'docbody'
  111. });
  112. //filters the store based on the current slider values
  113. function filterData(slider) {
  114. var values = slider.getValues();
  115. var test = [];
  116. //TODO: the suspend/resume hack can be removed once Filtering has been updated
  117. store.suspendEvents();
  118. store.clearFilter();
  119. store.resumeEvents();
  120. store.filter([{
  121. fn: function(record) {
  122. return record.get('price') >= values[0] && record.get('price') <= values[1];
  123. }
  124. }]);
  125. store.sort('name', 'ASC');
  126. }
  127. //perform initial filter
  128. filterData(phoneSlider);
  129. });