Skip to content

Commit d0fcf6e

Browse files
committed
Grid Editing: Implement $.observable.remove(array) signature
1 parent fda9c75 commit d0fcf6e

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

grid-editing/grid-selectable.html

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,8 @@
154154
alert( "None selected" );
155155
return;
156156
}
157-
$.each( selected, function( index, developer ) {
158-
$.observable( localDevelopers ).remove( developer );
159-
$.observable( selected ).remove( developer );
160-
});
157+
$.observable( localDevelopers ).remove( selected );
158+
selected = [];
161159
developers.refresh();
162160
});
163161

grid-editing/observable.js

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,18 +95,45 @@
9595
},
9696

9797
remove: function( index, numToRemove ) {
98-
// TODO implement $.type( index ) === "array"
98+
if ( $.type( index ) === "array" ) {
99+
// TODO there's probably a more efficient way to do this
100+
var i,
101+
j,
102+
l,
103+
m,
104+
removed = [],
105+
toRemove = index;
106+
for ( i = 0, l = this.data.length; i < l; i++ ) {
107+
for ( j = 0, m = toRemove.length; j < m; j++ ) {
108+
// TODO use an equal-method to compare objects, to allow custom matching on primary keys etc.
109+
if ( toRemove[ j ] === this.data[ i ] ) {
110+
removed.push({
111+
index: i,
112+
item: this.data[ j ]
113+
});
114+
break;
115+
}
116+
}
117+
}
118+
var removals = 0;
119+
for ( i = 0, l = removed.length; i < l; i++ ) {
120+
this.data.splice( removed[ i ].index - removals, 1 );
121+
removals += 1;
122+
}
123+
return this.trigger( "remove", { items: removed } );
124+
}
99125
if ( $.type( index ) === "object" ) {
100126
numToRemove = 1;
101127
for ( var i = 0, l = this.data.length; i < l; i++ ) {
102-
if ( this.data[i] === index) {
128+
// TODO same as above
129+
if ( this.data[ i ] === index) {
103130
index = i;
104131
break;
105132
}
106133
}
107134

108135
}
109-
if (!numToRemove) {
136+
if ( !numToRemove ) {
110137
numToRemove = 1;
111138
}
112139
var items = this.data.slice( index, index + numToRemove );

0 commit comments

Comments
 (0)