Skip to content

Commit e2aaa2c

Browse files
committed
Grid Editing: Modify grid template usage to store each item via data-method. Pave the way to upgrade to jsrender (no tmplItem method). Some minor cleanup, too.
1 parent 67cab6b commit e2aaa2c

File tree

4 files changed

+21
-15
lines changed

4 files changed

+21
-15
lines changed

grid-editing/editor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ $.widget( "ui.editor", {
2727
this.input = this.input.spinner();
2828
this.inputWrapper = this.input.spinner("widget");
2929
}
30-
this.inputWrapper.hide().appendTo( this.element )
30+
this.inputWrapper.hide().appendTo( this.element );
3131

3232
this._bind( this.inputWrapper, {
3333
focusin: function() {

grid-editing/grid.html

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,9 @@
5050
},
5151
objectchange: function(event, ui) {
5252
console.log("developer at index", ui.index, "changed", ui.object);
53-
this.save().refresh();
5453
},
5554
change: function(event, ui) {
5655
console.log("developer(s) at index", ui.index, ui.change + "ed", ui.items);
57-
this.save().refresh();
5856
}
5957
});
6058
developers.save = function() {
@@ -73,7 +71,7 @@
7371
return grid.element.find( "th" ).eq( cell[ 0 ].cellIndex ).data( "type" );
7472
},
7573
submit: function( event, ui) {
76-
var object = ui.item.tmplItem().data,
74+
var object = ui.item.closest("tr").data( "grid-item" ),
7775
field = grid.element.find( "th" ).eq( ui.item[ 0 ].cellIndex ).data( "field" ),
7876
oldValue = get(object, field);
7977
set(object, field, ui.value);
@@ -82,37 +80,39 @@
8280
oldValue: oldValue,
8381
newValue: ui.value
8482
});
83+
developers.save();
8584
// for the navigator
8685
grid.element.focus();
8786
}
8887
});
8988
grid.element.navigator();
9089

91-
var developer, tmplItem;
90+
var developer;
9291
var editForm = $( "#editForm" ).hide().submit( function( event ) {
9392
event.preventDefault();
9493
serializeForm( this, developer );
9594
developers._trigger("objectchange", event, {
9695
index: localDevelopers.indexOf(developer),
9796
object: developer
9897
});
98+
developers.save().refresh();
9999
editForm.hide();
100100
});
101101
grid.element.delegate( "button.edit", "click", function() {
102-
tmplItem = $( this ).tmplItem();
103-
developer = tmplItem.data;
102+
developer = $( this ).closest("tr").data( "grid-item" );
104103
$( "#edit-tmpl" ).tmpl( meta(developer) ).appendTo( editForm.find("fieldset").empty() );
105104
editForm.show();
106105
});
107106
grid.element.delegate( "button.remove", "click", function() {
108-
var developer = $( this ).tmplItem().data;
107+
var developer = $( this ).closest("tr").data( "grid-item" );
109108
var index = localDevelopers.indexOf( developer );
110109
localDevelopers.splice( index, 1 );
111110
developers._trigger("change", event, {
112111
change: "remove",
113112
index: index,
114113
items: [ developer ]
115114
});
115+
developers.save().refresh();
116116
});
117117

118118
$( "#pageDevelopers" ).pager({
@@ -135,6 +135,7 @@
135135
index: 0,
136136
items: [localDevelopers[0]]
137137
});
138+
developers.save().refresh();
138139
});
139140

140141
$("form").tooltip();

grid-spf/grid.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,10 @@
8686

8787
$( "#developers-local" ).grid({
8888
columns: [ "firstName", "lastName", "country" ],
89-
source: developers
89+
source: developers,
90+
select: function( event, ui ) {
91+
console.log( "Selected " + ui.item.firstName );
92+
}
9093
});
9194

9295
$( "#filterDevelopers" ).filterControl( developers );

grid-spf/grid.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ $.widget( "ui.grid", {
2323
this.element.find( "th" ).addClass( "ui-widget-header" );
2424
this.element.delegate( "tbody > tr", "click", function( event ) {
2525
that._trigger( "select", event, {
26-
// TODO add item
26+
item: $( this ).data( "grid-item" )
2727
});
2828
});
2929
$(this.options.source.element).bind("datasourceresponse", function() {
@@ -32,19 +32,21 @@ $.widget( "ui.grid", {
3232
},
3333
refresh: function() {
3434
// TODO this code assumes a single tbody which is not a safe assumption
35-
var tbody = this.element.find( "tbody" ).empty();
36-
// TODO how to refresh a single row? -> tmplItem().update()
37-
$.tmpl( this.options.rowTemplate, this.options.source.toArray() ).appendTo( tbody );
35+
var tbody = this.element.find( "tbody" ).empty(),
36+
template = this.options.rowTemplate;
37+
$.each( this.options.source.toArray(), function( itemId, item ) {
38+
$.tmpl( template, item ).data( "grid-item", item ).appendTo( tbody );
39+
});
3840
this._trigger("refresh");
3941
},
4042

4143
_columns: function() {
4244
if ( this.options.columns ) {
4345
var head = this.element.find("thead");
44-
if ( !thead.find( "th" ).length ) {
46+
if ( !head.find( "th" ).length ) {
4547
// TODO improve this
4648
$.each( this.options.columns, function(index, column) {
47-
$("<th>").attr("data-field", column).text(column).appendTo(head)
49+
$("<th>").attr("data-field", column).text(column).appendTo(head);
4850
});
4951
}
5052
return;

0 commit comments

Comments
 (0)