重新绘制extJS中的组件

时间:2012-01-24 18:46:43

标签: extjs

我需要做下一步:有几个按钮。按任何按钮改变了状态,因此一些按钮变得不可见。 我写了以下代码

Loyalty.company.CompanyEditForm = Ext.extend(Loyalty.tools.AdvancedForm,
    {
        defaultConfig:{
            ......
            currentState: 'READONLY'
            // EDIT, CREATE, CREATE_EDIT
        },


        constructor:function (config) {
            Ext.apply(config, this.defaultConfig);
            config['owner'] = this;
            config['items'] = [];
            config['items'] = this.createItems(config);
            config['buttons'] = this.createButtons(config);
            Loyalty.company.CompanyEditForm.superclass.constructor.call(this, config);
            this.loadCompany(config['jsonCompany']);
            this.renderingView(config);// here it's ok
        },

....

        renderingView:function (config){
           if (config.currentState == 'READONLY'){
               this.items.items[0].disabled = false;
               Ext.ComponentQuery.query('#cardNumber')[0].disabled = true;
               Ext.ComponentQuery.query('#btnEdit')[0].hidden = false;
               Ext.ComponentQuery.query('#btnRewrite')[0].hidden  = true;
               Ext.ComponentQuery.query('#btnSubmit')[0].hidden  = true;
               Ext.ComponentQuery.query('#btnCancel')[0].hidden  = false;
           } else if (config.currentState == 'EDIT'){
               this.items.items[0].disabled = false;
               Ext.ComponentQuery.query('#cardNumber')[0].disabled = false;
               Ext.ComponentQuery.query('#btnEdit')[0].hidden = true;
               Ext.ComponentQuery.query('#btnRewrite')[0].hidden  = true;
               Ext.ComponentQuery.query('#btnSubmit')[0].hidden  = false;
               Ext.ComponentQuery.query('#btnCancel')[0].hidden  = false;
           } else if (config.currentState == 'CREATE'){
               Ext.ComponentQuery.query('#cardNumber')[0].disabled = false;
               Ext.ComponentQuery.query('#btnEdit')[0].hidden = true;
               Ext.ComponentQuery.query('#btnRewrite')[0].hidden  = false;
               Ext.ComponentQuery.query('#btnSubmit')[0].hidden  = false;
               Ext.ComponentQuery.query('#btnCancel')[0].hidden  = false;
           }
            this.owner.doComponentLayout()
           return null;
        },



        createButtons:function (config, form) {
            return [
                {
                    id: 'btnEdit',
                    text:Loyalty.messages['company.edit.fields.edit'],
                    handler:function () {
                        config.currentState =  'EDIT';
                        config.owner.renderingView(config)
                    }
                }  ,
                {
                    xtype:'button',
                    id: 'btnRewrite',
                    text:Loyalty.messages['company.edit.fields.rewrite'],
                    handler:function () {
                        config.currentState =  'READONLY';
                        config.owner.renderingView(config)
                    }
                },
                {
                    xtype:'button',
                    id: 'btnSubmit',
                    text:Loyalty.messages['company.edit.fields.submit'],
                    handler:function () {
                        config.currentState =  'CREATE_EDIT';
                        config.owner.renderingView(config)
                    }
                },
                {
                    xtype:'button',
                    id: 'btnCancel',
                    text:Loyalty.messages['company.edit.fields.cancel'],
                    handler:function () {
                        if (config.currentState ==  'EDIT' || config.currentState ==  'CREATE_EDIT'){
                            config.currentState =  'READONLY';
                            config.owner.renderingView(config)
                        }
                    }
                }
            ];
        },

        ....
    }
);
当我从构造函数中调用它时,

函数renderingView很好用。但是当它从按钮方法调用时,没有任何反应。要更改的按钮的状态(隐藏)。 我认为重绘的问题

3 个答案:

答案 0 :(得分:1)

您应该使用setVisiblesetDisabled方法,而不是在renderingView中设置属性。

答案 1 :(得分:0)

我相信当按钮处理程序运行时,您的配置对象是未定义的。您是否在Chrome中获得错误堆栈跟踪?

答案 2 :(得分:0)

原因很简单。一旦我开始使用setVisibled()和setDisabled()而不是禁用并隐藏一切正常工作