I have a Kendo Grid with some "kendoDraggable()" methods on it. This allows me to drag/drop the rows (i.e. reordering rows).
It's based on this : http://jsfiddle.net/BtkCf/4/
The drag/drop of the rows works great, but it then almost completely disables the Edit/Update functions on the grid. That is, the Edit is buggy and won't let me access the cell's text content.
In my attached screen shots, I show the portion of the grid I'm trying to edit. I can click on the EDIT/UPDATE buttons, but CANNOT access the text. There's no error whatsoever.
How can I safely disable the kendoDraggable() events ?
I've tried this, but it doesn't work :
and neither does this :
HTML def:
and here's the function in my angular controller :
It's based on this : http://jsfiddle.net/BtkCf/4/
The drag/drop of the rows works great, but it then almost completely disables the Edit/Update functions on the grid. That is, the Edit is buggy and won't let me access the cell's text content.
In my attached screen shots, I show the portion of the grid I'm trying to edit. I can click on the EDIT/UPDATE buttons, but CANNOT access the text. There's no error whatsoever.
How can I safely disable the kendoDraggable() events ?
I've tried this, but it doesn't work :
$(
'#userKriGrid tbody tr'
).off(
"click"
,
'**'
);
and neither does this :
mainGrid.table.kendoDestroy()
HTML def:
<
span
id
=
"userKriGrid"
kendo-grid
=
"vm.userKriGrid"
k-data-source
=
"vm.kriUserGridDS"
k-options
=
"vm.userKriGridOptions"
k-rebind
=
"vm.userKriGridOptions"
>
</
span
>
and here's the function in my angular controller :
function
addDragDropKRIGridRow() {
var
mainGrid = $(
"#userKriGrid"
).data(
"kendoGrid"
);
var
mainDataSource = vm.kriUserGridDS;
var
selectedClass =
'k-state-selected'
;
$.fn.reverse = [].reverse;
//save a new function from Array.reverse
$(document).on(
'click'
,
'#userKriGrid tbody tr'
,
function
(e) {
if
(e.ctrlKey || e.metaKey) {
$(
this
).toggleClass(selectedClass);
}
else
{
$(
this
).addClass(selectedClass).siblings().removeClass(selectedClass);
}
});
mainGrid.table.kendoDraggable({
filter:
"tbody tr"
,
group:
"gridGroup"
,
axis:
"y"
,
hint:
function
(item) {
var
helper = $(
'<div class="k-grid k-widget drag-helper"/>'
);
if
(!item.hasClass(selectedClass)) {
item.addClass(selectedClass).siblings().removeClass(selectedClass);
}
var
elements = item.parent().children(
'.'
+ selectedClass).clone();
item.data(
'multidrag'
, elements).siblings(
'.'
+ selectedClass).remove();
return
helper.append(elements);
}
});
mainGrid.table.kendoDropTarget({
group:
"gridGroup"
,
drop:
function
(e) {
var
draggedRows = e.draggable.hint.find(
"tr"
);
e.draggable.hint.hide();
var
dropLocation = $(document.elementFromPoint(e.clientX, e.clientY)),
dropGridRecord = mainDataSource.getByUid(dropLocation.parent().attr(
"data-uid"
))
if
(dropLocation.is(
"th"
)) {
return
;
}
var
beginningRangePosition = mainDataSource.indexOf(dropGridRecord),
//beginning of the range of dropped row(s)
rangeLimit = mainDataSource.indexOf(mainDataSource.getByUid(draggedRows.first().attr(
"data-uid"
)));
//start of the range of where the rows were dragged from
//if dragging up, get the end of the range instead of the start
if
(rangeLimit > beginningRangePosition) {
draggedRows.reverse();
//reverse the records so that as they are being placed, they come out in the correct order
}
//assign new spot in the main grid to each dragged row
draggedRows.each(
function
() {
var
thisUid = $(
this
).attr(
"data-uid"
),
itemToMove = mainDataSource.getByUid(thisUid);
mainDataSource.remove(itemToMove);
mainDataSource.insert(beginningRangePosition, itemToMove);
});
//set the main grid moved rows to be dirty
draggedRows.each(
function
() {
var
thisUid = $(
this
).attr(
"data-uid"
);
mainDataSource.getByUid(thisUid).set(
"dirty"
,
true
);
});
//remark things as visibly dirty
var
dirtyItems = $.grep(mainDataSource.view(),
function
(e) {
return
e.dirty ===
true
; });
for
(
var
a = 0; a < dirtyItems.length; a++) {
var
thisItem = dirtyItems[a];
mainGrid.tbody.find(
"tr[data-uid='"
+ thisItem.get(
"uid"
) +
"']"
).find(
"td:eq(0)"
).addClass(
"k-dirty-cell"
);
mainGrid.tbody.find(
"tr[data-uid='"
+ thisItem.get(
"uid"
) +
"']"
).find(
"td:eq(0)"
).prepend(
'<span class="k-dirty"></span>'
)
};
}
});
}