如何在 ExtJS 3.x 中构建可拖动的字段集

Posted

技术标签:

【中文标题】如何在 ExtJS 3.x 中构建可拖动的字段集【英文标题】:How to build draggable field sets in ExtJS 3.x 【发布时间】:2011-10-11 11:31:08 【问题描述】:

我想构建一个 ExtJS FormPanel,允许用户使用拖放操作重新排序字段集列表。

我看到使用 draggable: true 可以很容易地使字段集可移动,但是如何设置 dropzone?我尝试了许多示例,但运气不佳。

MyApp.FormPanel = Ext.extend(Ext.FormPanel,
    title: 'Fields',

    fieldSetCount: 0,

    constructor: function(config)
        Ext.apply(this, config);

        this.tbar = [
            text: 'Add Field Set',
            handler: this.addFieldSet,
            scope: this
        ];

        MyApp.FormPanel.superclass.constructor.call(this, config);
    ,

    addFieldSet: function()
        this.add(
            xtype: 'fieldset',
            title: 'Fieldset ' + this.fieldSetCount++,
            draggable: true
        );
        this.doLayout();
    ,
);

【问题讨论】:

【参考方案1】:

您需要实施 Ext.dd.DropZone 来归档它!有关更多详细信息,请参阅Ext.JS 3.x API

以下示例未经测试,但它应该向您展示诀窍!

FormDropZone = function (form, config) 
    this.form = form;
    FormDropZone.superclass.constructor.call(this, form.view.scroller.dom, config);
;


Ext.extend(FormDropZone, Ext.dd.DropZone, 
    onContainerOver: function (dd, e, data) 
        return dd.form !== this.form ? this.dropAllowed : this.dropNotAllowed;
    ,
    onContainerDrop: function (dd, e, data) 
        if (dd.form !== this.form) 
            this.form.onFormDrop(this.form, data.selections, dd.form);
            return true;
        
        else 
            return false;
        
    ,
    containerScroll: true
);


DDform = Ext.extend(Ext.form.formPanel, 
    // configuration
    initComponent: function () 
        var config = ;
        Ext.apply(this, Ext.apply(this.initialConfig, config));
        DDform.superclass.initComponent.apply(this, arguments);
    ,
    onRender: function () 
        DDform.superclass.onRender.apply(this, arguments);
        this.dz = new FormDropZone(this,  ddGroup: this.ddGroup || 'formDD' );
    ,  
    onFormDrop: Ext.emptyFn
);

希望对您有所帮助!

【讨论】:

以上是关于如何在 ExtJS 3.x 中构建可拖动的字段集的主要内容,如果未能解决你的问题,请参考以下文章

extjs 面板的可拖动事件

在 Extjs 中设置 basecls 会破坏可拖动容器

Extjs 数字字段问题

拖动面板时的 extjs 阴影错误

用户界面问题,无法在移动设备上输入输入字段,因为父容器是可拖动可排序的

ExtJs - 具有动态可关闭标签的文本字段