【发布时间】:2010-08-01 19:38:08
【问题描述】:
我正在尝试实现从 extJs TreePanel 拖放到页面正文中的 div 中。我一直在关注 Saki here 的一个例子。
到目前为止,我有以下代码:
var contentAreas = new Array();
var tree = new Ext.tree.TreePanel({
title : 'Widgets',
useArrows: true,
autoScroll: true,
animate: true,
enableDrag: true,
border: false,
layout:'fit',
ddGroup:'t2div',
loader:new Ext.tree.TreeLoader(),
root:new Ext.tree.AsyncTreeNode({
expanded:true,
leaf:false,
text:'Tree Root',
children:children
}),
listeners:{
startdrag:function() {
$('.content-area').css("outline", "5px solid #FFE767");
},
enddrag:function() {
$('.content-area').css("outline", "0");
}
}
});
var areaDivs = Ext.select('.content-area', true);
Ext.each(areaDivs, function(el) {
var dd = new Ext.dd.DropTarget(el, {
ddGroup:'t2div',
notifyDrop:function(ddt, e, node) {
alert('Drop');
return true;
}
});
contentAreas[contentAreas.length] = dd;
});
拖动开始并且 div 突出显示,但是当我越过 div 时,它不会显示为有效的放置目标并且放置失败。
这是我第一次涉足 extJS。我是彻头彻尾的 JQuery,我现在正在苦苦挣扎。
任何帮助将不胜感激。
伊恩
编辑
此外,如果我创建一个带有放置目标的面板,则效果很好。创建元素和从 dom 中选择现有元素有什么区别。这显然是我出错的地方,但我并不聪明。我必须能够选择现有的 dom 元素并将它们变成放置目标,所以下面的代码不是一个选项。
这是有效的放置目标
var target = new Ext.Panel({
renderTo: document.body
,layout:'fit'
,id:'target'
,bodyStyle:'font-size:13px'
,title:'Drop Target'
,html:'<div class="drop-target" '
+'style="border:1px silver solid;margin:20px;padding:8px;height:140px">'
+'Drop a node here. I\'m the DropTarget.</div>'
// setup drop target after we're rendered
,afterRender:function() {
Ext.Panel.prototype.afterRender.apply(this, arguments);
this.dropTarget = this.body.child('div.drop-target');
var dd = new Ext.dd.DropTarget(this.dropTarget, {
// must be same as for tree
ddGroup:'t2div'
// what to do when user drops a node here
,notifyDrop:function(dd, e, node) {
alert('drop');
return true;
} // eo function notifyDrop
});
}
});
【问题讨论】:
标签: drag-and-drop extjs