哈尼 2012-12-07 08:50 采纳率: 0%
浏览 240
已采纳

EXT4.0方法如何进行好的封装

自己在项目中写了一个公用的方法,方法调用的比较多,就相当于一个window window里面的内容也比较多,现在需要吧这整个方法抽离出来,方便其他的组员进行调用,初始window里面定义的form就有2个 fileSet就更多了 还有panle等等 里面也自己定义了些ID,现在不知道如何进行好的封装,刚接触EXT也没多久,求各位亲给点思路!

  • 写回答

2条回答 默认 最新

  • cumt_boy 2012-12-07 11:59
    关注

    [code="js"]
    //mixins类
    Ext.define('Canna.mixins.GridUtil', {
    onAfterrender : function() {
    var me = this;
    if (!this.getStore && !this.getStore()) {
    return;
    }
    this.showLoadingMark();
    this.getStore().load({
    callback : function() {
    me.hideLoadingMark();
    }
    });
    },
    onSelectionchange : function(sm, selections) {
    this.view.panel.down('#removeButton').setDisabled(
    selections.length == 0);
    },
    onAddHandler : function() {
    var panel = this.up('gridpanel');
    var store = panel.getStore();
    if (store.storeId == 'ext-empty-store') {
    store = Ext.create('Ext.data.Store', {
    model : 'Ext.data.Model',
    fields : [],
    proxy : 'memory'
    });
    panel.bindStore(store);
    }
    var model = store.model;
    var r = Ext.create(model, {});
    panel.getStore().insert(0, r);

        if (panel.rowEditingAble) {
            var rowEditing = panel.getEditPlugin();
            rowEditing.cancelEdit();
            rowEditing.startEdit(0, 0);
        }
    },
    onDeleteHandler : function() {
        var grid = this.up('gridpanel');
        var records = grid.getSelectionModel().getSelection();
        Ext.MessageBox.confirm('Confirm', '请确定删除!', function(buttonId) {
            if (buttonId == 'yes') {
                grid.getStore().remove(records);
            }
        });
    },
    showLoadingMark : function() {
        this.loadingMark = this.loadingMark || new Ext.LoadMask(this, {
            msg : 'loading...'
        });
        this.loadingMark.show();
    },
    hideLoadingMark : function() {
        this.loadingMark.hide();
    },
    getEditPlugin : function() {
        return this.getPlugin(this._pluginId);
    },
    addRowEditPlugin : function() {
        var me = this;
        me._pluginId = 'rowEditing' + Math.random();
        var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
            clicksToEdit : 2,
            autoCancel : true,
            pluginId : me._pluginId
        });
        me.plugins = [ rowEditing ];
    }
    

    });

    //extend 类
    Ext.define('Canna.view.BaseGridPanel', {
    extend : 'Ext.grid.Panel',
    alias : 'widget.baseGridPanel',
    mixins : [ 'Canna.mixins.GridUtil' ],
    initComponent : function() {
    // rowEditingAble
    // checkboxModelAble
    // simpleDockAble
    // autoLoadStore
    var me = this;
    if (this.rowEditingAble) {
    this.addRowEditPlugin();
    }
    if (this.autoLoadStore) {
    this.addListener('afterrender', me.onAfterrender);
    }
    if (this.checkboxModelAble) {
    this.selModel = Ext.create('Ext.selection.CheckboxModel', {
    listeners : {
    selectionchange : me.onSelectionchange
    }
    });
    }
    if (this.simpleDockAble) {
    this.dockedItems = [ {
    xtype : 'toolbar',
    items : [ {
    text : '添加',
    iconCls : 'add',
    handler : me.onAddHandler
    }, '-', {
    itemId : 'removeButton',
    text : '删除',
    iconCls : 'remove',
    disabled : true,
    handler : me.onDeleteHandler
    } ]
    } ];
    }
    this.callParent(arguments);

    }
    

    });
    [/code]

    使用mixins,或使用extend

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?