`
yiminghe
  • 浏览: 1453125 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ext.DD portal示例

阅读更多

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 的效果.

4
0
分享到:
评论
1 楼 yiminghe 2012-05-08  
superchinaren 写道
请问在拖动时鼠标点击的位置与拖动的对象不一致这个问题怎么解决。比如我在一个DIV的正中间点击后再拖动。此时鼠标指针自动给移动到了DIV的最左上角。


可以换 kissy 试试 :)

http://docs.kissyui.com/kissy/src/dd/demo/portal.html

相关推荐

    Ext.js 6 示例学习

    "Ext.JS6ByExample.pdf"很可能是一本基于实例的教学手册,通常这样的书籍会通过具体的代码示例来解释Ext.js 6的各种功能和组件的用法。读者可以通过这些例子了解如何创建组件,如表格、表单、树形视图、图表等,以及...

    EXT dojoChina按钮控件示例 Ext.Button.rar

    EXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rar

    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_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档EXT.JS_文档...

    Ext.get与Ext.fly的区别

    ### Ext.get与Ext.fly的区别 在Ext JS框架中,`Ext.get`和`Ext.fly`是两个非常重要的方法,它们主要用于操作DOM元素。理解这两个方法之间的区别以及如何使用它们对于开发高质量、高效率的应用程序至关重要。 #### ...

    extjs-Ext.ux.form.LovCombo下拉框

    在EXTJS框架中,`Ext.ux.form.LovCombo`是一种自定义组件,它扩展了基本的`Ext.form.field.ComboBox`,提供了更丰富的功能,尤其是针对多选和联动选择的需求。这个组件通常用于创建具有“lov”(即“Look Up Value”...

    EXT dojochina文本框示例Ext.form.TextField.rar

    在本示例中,"EXT dojochina文本框示例Ext.form.TextField.rar"是一个压缩包,包含了EXT框架中关于`Ext.form.TextField`组件的示例代码。 `Ext.form.TextField`是EXT框架中的一个核心组件,用于创建基本的输入字段...

    Ext.Ajax.request2.x实现同步请求

    在EXTJS库中,`Ext.Ajax.request`是用于发送Ajax请求的核心方法,它支持异步和同步操作。本文将详细解析如何利用`Ext.Ajax.request`实现同步请求,并探讨其背后的原理和注意事项。 首先,我们需要理解Ajax的本质,...

    Ext.data.Store的基本用法

    ### Ext.data.Store的基本用法详解 #### 一、Ext.data.Store简介 `Ext.data.Store`是ExtJS框架中用于管理数据的核心组件之一。它主要负责数据的存储、加载、更新等操作,并且提供了多种方法来方便地处理这些数据。...

    Ext.get与Ext.fly 的区别

    在EXTJS这个强大的JavaScript框架中,`Ext.get`和`Ext.fly`是两个非常重要的方法,它们都用于操作DOM元素,但它们之间存在着微妙的差异。了解这些差异对于优化代码性能和理解EXTJS的工作机制至关重要。 首先,`Ext....

    org.restlet.ext.spring.jar

    org.restlet.ext.spring.jar

    Ext.Store的获取方法

    在Ext.js中,`Ext.Store`是用来管理数据的类,它通常与各种UI组件(如Grid、ComboBox等)关联,用于存储和检索数据。然而,获取`Ext.Store`的方式并不像获取其他Ext组件那样直接,因为Store并不是一个具有可视界面的...

    一个简单的Ext.Window中插入图片的例子

    此外,提供的`一个简单的Ext.Window中插入图片.doc`文件可能包含更详细的步骤或示例代码,建议查阅该文档以获取更深入的理解。记住,实践是最好的老师,动手尝试并根据项目需求进行调整,你将更加熟练地掌握在`Ext....

    EXT.form组件

    EXT.form组件是EXT JS库中用于构建表单界面的核心组件集合。这些组件提供了一系列丰富的控件,用于创建具有不同功能的交互式表单。在EXT JS中,表单组件不仅包含基本的输入字段,还支持复杂的输入类型和验证机制。 ...

    Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文

    Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文Ext.3.0.中文

    Ext.js教程和Ext.js API

    Ext.js 是一个强大的JavaScript库,专门用于构建富客户端的Web应用程序。它提供了丰富的用户界面组件和数据绑定功能,使得开发者可以构建出具有桌面应用级别的交互式网页应用。本教程和API文档聚焦于Ext.js 3.0版本...

    vbe6ext.olb

    运行Microsoft office时,vbe6ext.olb不能加载

    Ext3.2的Ext.data.Store类和Ext.Ajax类的实际运用

    环境:Window XP Sp2、Tomcat 6.0、...关于Ext.data.Store类,我们可以看出:该框架提供了客户端缓存的功能--这对于我们框架系统是非常有帮助的。本示例代码注释非常详细。 阅读对象:需要使用Ext框架进行Web开发的人员

    在.NET中使用Ext.Direct示例源代码

    标题中的“在.NET中使用Ext.Direct示例源代码”指的是一个包含具体示例的项目,这个项目展示了如何在.NET环境中集成并使用Ext.Direct。这可能包括了服务器端的控制器代码、服务接口定义以及客户端的JavaScript代码,...

    ext.js拖动3.4版本插件

    这个插件的核心在于Ext.dd.DD和Ext.dd.DDProxy这两个类,它们是Ext JS中拖放功能的基础。DD类代表可拖动的元素,而DDProxy类则用于创建一个代理元素,它在拖动过程中跟随鼠标,提供视觉反馈。在拖动Tab标签的场景中...

Global site tag (gtag.js) - Google Analytics