Повторный пользовательский интерфейс | Repeating user interface
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.4KB

  1. Таблица = function(id)
  2. {
  3. this.задатьЗаголовки = (заголовки) =>
  4. {
  5. this.заголовки = заголовки;
  6. this.__пересобрать();
  7. };
  8. this.задатьСтроки = (строки) =>
  9. {
  10. this.строки = строки;
  11. this.__пересобрать();
  12. };
  13. this.элемент = (номер) =>
  14. {
  15. return $(`#${id}-${номер}`);
  16. };
  17. this.__пересобрать = () =>
  18. {
  19. this.__задатьСодержимое();
  20. this.__отслеживатьВыбор();
  21. };
  22. this.__задатьСодержимое = () =>
  23. {
  24. var содержимое = "";
  25. if (this.заголовки && this.заголовки.length)
  26. {
  27. var заголовок = "";
  28. for (var номер in this.заголовки)
  29. {
  30. var значение = this.заголовки[номер];
  31. заголовок += `<th>${значение}</th>`
  32. }
  33. содержимое += `
  34. <thead>
  35. <tr>
  36. ${заголовок}
  37. </tr>
  38. </thead>
  39. `;
  40. }
  41. if (this.строки && this.строки.length)
  42. {
  43. var тело = "";
  44. for (var номер in this.строки)
  45. {
  46. var столбцы = this.строки[номер];
  47. var строка = "";
  48. for (var н in столбцы)
  49. {
  50. var значение = столбцы[н];
  51. строка += `<td>${значение}</td>`;
  52. }
  53. тело += `<tr id="${id}-${номер}">${строка}</tr>`;
  54. }
  55. содержимое += `<tbody>${тело}</tbody>`;
  56. }
  57. $(`#${id}`).html(содержимое);
  58. };
  59. this.__отслеживатьВыбор = () =>
  60. {
  61. if (!(this.строки && this.строки.length))
  62. {
  63. return;
  64. }
  65. var тут = this;
  66. for (var номер in this.строки)
  67. {
  68. const номерСтроки = номер;
  69. $(`#${id}-${номер}`).click(function() {
  70. if (тут.выбор)
  71. {
  72. тут.выбор(номерСтроки);
  73. }
  74. });
  75. }
  76. };
  77. };