У меня есть вложенное дерево:React.js вложенного дерева Перетаскивания
var TreeNodes = React.createClass({
...
render : function() {
var output = this.props.item.children.map(function(node, index) {
return (<li><TreeNodes item = {node}/></li>);
})
return (
<div onDragEnter={this._onDragEnter}
onDragStart = {this._onDragStart}
onDragEnd = {this._onDragEnd}>
{item.title}
</div>
{output}
)
})
Вот функции (это поток, однако, я думаю, что это не важно):
_onDragStart : function(e) {
var draggingItem = {...};
this.props.context.executeAction(treeActions._onDragStart, draggingItem);
},
_onDragEnter: function(e){
var dropCandidate = {...};
this.props.context.executeAction(treeActions.checkDropPossible, dropCandidate);
var DraggingRef = this.props.dragging.type + this.props.dragging.id;
var self = this;
this.props.parent.refs[DraggingRef].getDOMNode().addEventListener('dragend', self._onDragEnd);
},
_onDragEnd : function(e) {
var dropPlace= {...};
this.props.context.executeAction(treeActions._onDrop, dropPlace);
if (this.isMounted()) {
this.getDOMNode().removeEventListener('dragend', this.dragEnd, false);
}
},
В onDragEnter я удаляю draggingItem из предыдущего места и добавляю к текущему. Все работает нормально, пока я перемещаю элементы в том же TreeNode. Когда я перехожу к другому, onDragEnter (изменение места элемента) все еще работает нормально, но onDragEnd не срабатывает. Может ли кто-нибудь дать мне подсказку? :)
Я понимаю, почему это не огонь (dragEnd был привязан к элементу, который был удален, а новый не имеет его). Однако почему моя ручная привязка не работает? :) Я проверил this.props.parent.refs [DraggingRef] .getDOMNode() и, похоже, указывает на правильный элемент ... – vassilsha