1
|
|
|
define( |
2
|
|
|
['jquery', 'underscore'], |
3
|
|
|
function ($, _) { |
4
|
|
|
'use strict'; |
5
|
|
|
return { |
6
|
|
|
init: function ($target, columns) { |
7
|
|
|
|
8
|
|
|
var $headerRow = $target.find('thead tr'); |
9
|
|
|
if($headerRow[0].innerHTML && $headerRow[0].innerHTML.length != 0){ |
|
|
|
|
10
|
|
|
return; |
11
|
|
|
} |
12
|
|
|
|
13
|
|
|
var $footerRow = $target.find('tfoot tr'); |
14
|
|
|
var $tbody = $target.find('tbody'); |
15
|
|
|
var values = $target.find('input.table-data').val(); |
16
|
|
|
|
17
|
|
|
values = $.parseJSON(values?values:'{}'); |
18
|
|
|
|
19
|
|
|
var emptyTitle = '<th class="AknGrid-headerCell" style="width: 47px"></th>'; |
20
|
|
|
// Title for reorder column |
21
|
|
|
$headerRow.append(emptyTitle); |
22
|
|
|
$footerRow.append(emptyTitle); |
23
|
|
|
_.each(columns, function (column) { |
24
|
|
|
var th = "<th class='AknGrid-headerCell "+column.id+"'>"+column.text+"</th>"; |
25
|
|
|
$headerRow.append(th); |
26
|
|
|
$footerRow.append(th); |
27
|
|
|
}.bind(this)); |
|
|
|
|
28
|
|
|
// Title for delete button column |
29
|
|
|
$headerRow.append(emptyTitle); |
30
|
|
|
$footerRow.append(emptyTitle); |
31
|
|
|
|
32
|
|
|
_.each(values, function(row) { |
33
|
|
|
var htmlColumns = []; |
34
|
|
|
_.each(columns, function (column) { |
35
|
|
|
var value = ""; |
36
|
|
|
if (column.id in row) { |
37
|
|
|
value = row[column.id]; |
38
|
|
|
} |
39
|
|
|
|
40
|
|
|
htmlColumns.push(this.createColumn(column, value)); |
41
|
|
|
}.bind(this)); |
42
|
|
|
$tbody.append(this.createRow(htmlColumns)); |
43
|
|
|
}.bind(this)); |
44
|
|
|
}, |
45
|
|
|
createColumn: function (column, value) { |
46
|
|
|
var td = $("<td class='AknGrid-bodyCell "+column.id+"' data-code='"+column.id+"'>"+column.func.renderField({column: column, value: value})+"</td>"); |
47
|
|
|
column.func.init(td, column, value); |
48
|
|
|
|
49
|
|
|
return td; |
50
|
|
|
}, |
51
|
|
|
createRow: function (htmlColumns) { |
52
|
|
|
var row = $('<tr class="flagbit-table-row AknGrid-bodyRow editable-item-row"></tr>'); |
53
|
|
|
row.append($('<td class="AknGrid-bodyCell"><span class="handle"><i class="icon-reorder"></i></span></td>')); |
54
|
|
|
_.each(htmlColumns, function (htmlColumn) { |
55
|
|
|
row.append(htmlColumn); |
56
|
|
|
}); |
57
|
|
|
row.append($('<td class="AknGrid-bodyCell"><span class="btn btn-small AknButton AknButton--small AknIconButton--important delete-row"><i class="icon-trash"></i></span></td>')); |
58
|
|
|
|
59
|
|
|
return row; |
60
|
|
|
}, |
61
|
|
|
createEmptyRow: function (columns) { |
62
|
|
|
var htmlColumns = []; |
63
|
|
|
_.each(columns, function (column) { |
64
|
|
|
htmlColumns.push(this.createColumn(column, '')); |
65
|
|
|
}.bind(this)); |
66
|
|
|
|
67
|
|
|
return this.createRow(htmlColumns); |
68
|
|
|
} |
69
|
|
|
}; |
70
|
|
|
} |
71
|
|
|
); |
72
|
|
|
|