Ext.DD
子模块是很好的对拖放这样一个实现起来很麻烦的功能的封装,架构很清晰,接口很明确.最终使用 DropZone 与 DragZone即可.
----------------------------
DragDrop
DDTarget
DropTarget
DropZone
-----------------------------
DragDrop
DD
DDProxy
DragSource
DragZone
官方单独使用的例子比较少,今天阅读拖放模块源代码后,稍微熟悉一下与拖放模块的交互接口,写了个单独使用的例子:
简单拖放@google code
简单拖放源码@google code
portal演示@google code
portal源码@google code
jquery portal 比较:(转自javaeye网友)
jq portal演示@google code
jq portal源码@google code
细节体会:
1.
Ext.DD 没有采用事件机制,仅仅采用 override 方法来实现通知。
2.
DropZone 有容器以及容器内多个可drop区域的概念,容器通过 notifyOver 再通知各个 drop 区域,在每个通知中我们只需考虑当前是否在单个drop子区域并进行处理,不需要考虑整个容器,而注册时只需要对容器进行拖放注册,只需指明哪些属于应该关注的子区域,
基本上还是事件委托的理念,不用对个个子区域监听mousedown事件,改做容器监听。
3.
Jquery 方式可见没有采用事件委托,对每个子区域都单独定义了拖放事件,并且也没有公用拖放代理对象,可见Ext.DD当拖放对象极多时还是性能应该会更好一点。
4.
例子expamles/dd/dragdropzones.js 存在bug :
getDragData: function(e) {
var sourceEl = e.getTarget(v.itemSelector, 10);
if (sourceEl) {
d = sourceEl.cloneNode(true);
d.id = Ext.id();
return v.dragData = {
sourceEl: sourceEl,
repairXY: Ext.fly(sourceEl).getXY(),
ddel: d,
patientData: v.getRecord(sourceEl).data
}
}
},
ddel 当 invalid drag drop时,会发生 ddel.highlight 。
若传 d 则 highight 不会有效果(在复制节点上)。
修正:
var sourceEl = e.getTarget(v.itemSelector, 10);
if (sourceEl) {
return v.dragData = {
sourceEl: sourceEl,
repairXY: Ext.fly(sourceEl).getXY(),
ddel: sourceEl,
patientData: v.getRecord(sourceEl).data
}
}
其实 DragZone 已经clone了:
onInitDrag : function(x, y){
this.proxy.update(this.dragData.ddel.cloneNode(true));
this.onStartDrag(x, y);
return true;
},
但是做的不好,可能clone出重复 id 节点。
修正:
onInitDrag : function(x, y){
var t=this.dragData.ddel.cloneNode(true);
t.id=Ext.id();// prevent duplicate ids
this.proxy.update(t);
this.onStartDrag(x, y);
return true;
},
extjs 例子没有修改 DragZone ,而为了防止重 id ,在例子中自己clone,但是失去了 highlight 的效果.
分享到:
相关推荐
"Ext.JS6ByExample.pdf"很可能是一本基于实例的教学手册,通常这样的书籍会通过具体的代码示例来解释Ext.js 6的各种功能和组件的用法。读者可以通过这些例子了解如何创建组件,如表格、表单、树形视图、图表等,以及...
EXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rar
### Ext.get与Ext.fly的区别 在Ext JS框架中,`Ext.get`和`Ext.fly`是两个非常重要的方法,它们主要用于操作DOM元素。理解这两个方法之间的区别以及如何使用它们对于开发高质量、高效率的应用程序至关重要。 #### ...
在EXTJS框架中,`Ext.ux.form.LovCombo`是一种自定义组件,它扩展了基本的`Ext.form.field.ComboBox`,提供了更丰富的功能,尤其是针对多选和联动选择的需求。这个组件通常用于创建具有“lov”(即“Look Up Value”...
在本示例中,"EXT dojochina文本框示例Ext.form.TextField.rar"是一个压缩包,包含了EXT框架中关于`Ext.form.TextField`组件的示例代码。 `Ext.form.TextField`是EXT框架中的一个核心组件,用于创建基本的输入字段...
在EXTJS库中,`Ext.Ajax.request`是用于发送Ajax请求的核心方法,它支持异步和同步操作。本文将详细解析如何利用`Ext.Ajax.request`实现同步请求,并探讨其背后的原理和注意事项。 首先,我们需要理解Ajax的本质,...
### Ext.data.Store的基本用法详解 #### 一、Ext.data.Store简介 `Ext.data.Store`是ExtJS框架中用于管理数据的核心组件之一。它主要负责数据的存储、加载、更新等操作,并且提供了多种方法来方便地处理这些数据。...
在EXTJS这个强大的JavaScript框架中,`Ext.get`和`Ext.fly`是两个非常重要的方法,它们都用于操作DOM元素,但它们之间存在着微妙的差异。了解这些差异对于优化代码性能和理解EXTJS的工作机制至关重要。 首先,`Ext....
org.restlet.ext.spring.jar
在Ext.js中,`Ext.Store`是用来管理数据的类,它通常与各种UI组件(如Grid、ComboBox等)关联,用于存储和检索数据。然而,获取`Ext.Store`的方式并不像获取其他Ext组件那样直接,因为Store并不是一个具有可视界面的...
此外,提供的`一个简单的Ext.Window中插入图片.doc`文件可能包含更详细的步骤或示例代码,建议查阅该文档以获取更深入的理解。记住,实践是最好的老师,动手尝试并根据项目需求进行调整,你将更加熟练地掌握在`Ext....
EXT.form组件是EXT JS库中用于构建表单界面的核心组件集合。这些组件提供了一系列丰富的控件,用于创建具有不同功能的交互式表单。在EXT JS中,表单组件不仅包含基本的输入字段,还支持复杂的输入类型和验证机制。 ...
Ext.js 是一个强大的JavaScript库,专门用于构建富客户端的Web应用程序。它提供了丰富的用户界面组件和数据绑定功能,使得开发者可以构建出具有桌面应用级别的交互式网页应用。本教程和API文档聚焦于Ext.js 3.0版本...
EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档...
运行Microsoft office时,vbe6ext.olb不能加载
环境:Window XP Sp2、Tomcat 6.0、...关于Ext.data.Store类,我们可以看出:该框架提供了客户端缓存的功能--这对于我们框架系统是非常有帮助的。本示例代码注释非常详细。 阅读对象:需要使用Ext框架进行Web开发的人员
标题中的“在.NET中使用Ext.Direct示例源代码”指的是一个包含具体示例的项目,这个项目展示了如何在.NET环境中集成并使用Ext.Direct。这可能包括了服务器端的控制器代码、服务接口定义以及客户端的JavaScript代码,...
这个插件的核心在于Ext.dd.DD和Ext.dd.DDProxy这两个类,它们是Ext JS中拖放功能的基础。DD类代表可拖动的元素,而DDProxy类则用于创建一个代理元素,它在拖动过程中跟随鼠标,提供视觉反馈。在拖动Tab标签的场景中...
### Ext.window从右下角弹出/隐藏:深入解析与实现 #### 一、概述 在Web应用开发中,为了提升用户体验,开发者经常会利用各种UI框架来实现丰富的交互效果。ExtJS作为一款成熟且功能强大的JavaScript框架,在这方面...