Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. ko.bindingHandlers["sort"] = {
  2. init: (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) => {
  3. var ascending = false;
  4. element.onclick = () => {
  5. var value = valueAccessor();
  6. var array = value.arrayName;
  7. var key = value.key;
  8. ascending = !ascending;
  9.  
  10. array.sort(function (first, last) {
  11. var left = first;
  12. var right = last;
  13. if (!ascending) {
  14. left = last;
  15. right = first;
  16. }
  17. var keys = key.split('.');
  18. for (var i in keys) {
  19. var keyName = keys[i];
  20. var parentIndex = keyName.indexOf('()');
  21. if (parentIndex > 0) {
  22. keyName = keyName.substring(0, parentIndex);
  23. left = left[keyName]();
  24. right = right[keyName]();
  25. }
  26. else {
  27. left = left[keyName];
  28. right = right[keyName];
  29. }
  30. }
  31. return left == right ? 0 : left < right ? -1 : 1;
  32. });
  33. };
  34. }
  35. };
  36. }
  37.  
  38. <table class="table" id="largeTable">
  39. <thead>
  40. <tr>
  41. <th data-bind="sort: { arrayName: product, key: 'name' }">Name</th>
  42. <th data-bind="sort: { arrayName: product, key: 'type' }">Type</th>
  43. <th data-bind="sort: { arrayName: product, key: 'reviewsNumber()' }">Reviews</th>
  44. <th data-bind="sort: { arrayName: product, key: 'ratingNumber()' }">Ratings</th>
  45. <th data-bind="sort: { arrayName: product, key: 'priceNumber()' }">Price</th>
  46. <th data-bind="sort: { arrayName: product, key: 'date' }">Date</th>
  47. <th data-bind="sort: { arrayName: product, key: 'status' }">Status</th>
  48. </tr>
  49. </thead>
  50. <tbody>
  51. <!-- ko foreach: productOnPage -->
  52. <tr>
  53. <td><div data-bind="text: name"></div></td>
  54. <td><div data-bind="text: type"></div></td>
  55. <td><div data-bind="text: reviews"></div></td>
  56. <td><div data-bind="text: rating"></div></td>
  57. <td><div data-bind="text: price"></div></td>
  58. <td><div data-bind="text: date"></div></td>
  59. <td><div data-bind="text: status"></div></td>
  60. </tr>
  61. <!-- /ko -->
  62. </tbody>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement