Extjs this.up(...).down(...) 为空

Posted

技术标签:

【中文标题】Extjs this.up(...).down(...) 为空【英文标题】:Extjs this.up(...).down(...) is null 【发布时间】:2013-03-16 07:08:43 【问题描述】:

当我按下保存按钮时,它工作正常。但是当我在此字段上按 Enter 时遇到一些问题,错误消息是 this.up(...).down(...) 为空。下面给出了我的来自窗口。 我只是想,当您在文本框上按 Enter 键时,它会像您单击按钮一样。

谁能帮忙?

Ext.define('$pkgName.v01i002001.SV01I00200201' , 
    extend      : 'Ext.window.Window',
    alias       : 'widget.sv01i00200201',
    id          : 'sv01i00200201',   
    title       : 'MANUFACTURE :: SV01I00200201',
    minimizable : false,
    maximizable : false,
    autoShow    : true,
    resizable   : false,
    border      : false,
    modal       : true,
    padding     : '0 5 0 5',
    icon        : "$resource(dir: 'images', file: 'APP01003.png')",
    layout    : 
        type: 'vbox',
        align: 'stretch'
    ,
    initComponent : function () 
        var me = this; 
        var required = '<span style="color:red;font-weight:bold" data-qtip="Required">*</span>';       
        this.items = [
        
            xtype     : 'form',
            bodyStyle : 
                padding   : '10px',
                border    : true
            ,
            tbar: Ext.create('Ext.ux.StatusBar', 
                id              : 'win-statusbar-sv01i00200201',
                topBorder       :true,
                text            :'Status',
                defaultIconCls  : 'info',
                defaultText     : 'Status'
            ),
            items : [
                xtype             : 'textfield',
                fieldLabel        : 'Id',
                name              : 'id',
                width             : 265,
                anchor            : '95%',
                emptyText         : 'Not need...',
                readOnly          : true
            ,
                xtype             : 'textfield',
                fieldLabel        : 'Manufac. Name',
                emptyText         : 'Write Manufacturer name',
                allowBlank        :  false,
                name              : 'name',
                width             :  265,
                anchor            : '95%',
                listeners: 
                    specialkey    : function(field, e)
                        if (e.getKey() == e.ENTER || e.getKey()==e.TAB)                                     
                            //Ext.get('save-sv01i00200201').dom.click();                              //it work
                           // this.up().up().down('button[action=save]').fireEvent('click');          //TypeError: button.up is not a function
                           // this.up('sv01i00200201').down('button[action=save]').fireEvent('click');//TypeError: button.up is not a function
                           // this.up('window').down('button[action=save]').fireEvent('click');       //TypeError: button.up is not a function
                        
                    
                
            ]
        ]
        this.buttons = [
        
            text    : 'Save',
            icon    : "$resource(dir: 'images', file: 'SAV01004.png')",
            id      : 'save-sv01i00200201',
            action  : 'save'
        ,
            text    : 'Close',
            icon    : "$resource(dir: 'images', file: 'CLS01001.png')",      
            scope   : this,
            handler : function(button)
                var win = button.up('window');
                win.close();
            
        ]
        me.callParent(arguments);
    
);

下面给出我的控制器

Ext.define('$pkgName.C01I002001', 
    extend  : 'Ext.app.Controller', 
    requires: [],

    views:[
        'V01I001000',
        'v01i002001.SV01I00200100',
        'v01i002001.SV01I00200101',
        'v01i001001.SV01I00200104',
        'v01i001001.SV01I00200106',
        'v01i002001.SV01I00200201',
        'v01i002001.SV01I00200301'
    ],
    refs    : [
            ref : 'v01i002001',
            selector: 'window'
        ],
    init: function() 
        manuStore   = Ext.data.StoreManager.get('S01I002001'); 
        var me      = this;
        me.category = undefined;        
        me.control(             
            'sv01i00200201 button[action=save]': 
                click           :   this.manufacturerSave
            
        );
    ,
    manufacturerSave   :   function(button)
        win     = button.up('window'),
        form    = win.down('form'),
        record  = form.getRecord(),
        values  = form.getValues();

        if(form.getForm().isValid())

            var manufacturer    = Ext.create('$appName.model.M01I002001',
                name:values.name
            );        

            manufacturer.save(
                scope:this,
                success:function(records, operation)
                    var text     = operation.response.responseText,
                    json         = Ext.decode(text);
                    form.loadRecord(records);
                    controller000.statusbar('sv01i00200201', json.message, 'saveInfo', 'activecaption');
                    manuStore.load();
                    var win       = Ext.getCmp('sv01i00200201');
                    controller000.closeWindow(win);
                ,

                failure:function(model, operation)
                    controller000.statusbar('sv01i00200201', operation.error, 'warnInfo', 'red');
                 
            ); 
        else
            controller000.statusbar('sv01i00200201', 'Necessary Field Required', 'warnInfo', 'red');

        
    
);

【问题讨论】:

所以你的问题/问题已经变异了...... XD你能描述一下当前的问题吗? 我只是想,当我在文本框上按下回车键时,它就像我点击了按钮一样。但它只能通过 Ext.get('save-sv01i00200201').dom.click();不是其他系统我相信它会在其他系统上工作,但我找不到我的错误 【参考方案1】:

this.up() 只向上冒出一层,目标是您的字段的直接父级(表单面板)。请尝试以下选项之一:

this.up().up().down('button[action=save]').fireEvent('click');
this.up('window').down('button[action=save]').fireEvent('click');
this.up('#sv01i00200201').down('button[action=save]').fireEvent('click');

看看documentation ;)


第 2 部分:“button.up 不是函数”

我想我明白了,您必须手动将按钮作为参数传递给 fireEvent 函数:

var button = this.up('window').down('button[action=save]');
button.fireEvent('click', button);

【讨论】:

谢谢你。通过您的过程,我已经尝试过,但给出了一个错误,例如 button.up is not a function。我想你会解决它我给我的控制器动作波纹管'sv01i00200201 button[action=save]':点击:this.manufacturerSave,manufacturerSave:function(button)win = button.up('window'),form = win.down('form'), record = form.getRecord(), values = form.getValues(); @OmarFaruq 你能更新你的问题吗?在 cmets 中它的可读性不高。谢谢。【参考方案2】:

最后我通过像 as 一样创建 id 来做到这一点

 Ext.get('save-sv01i00200201').dom.click();

按钮修改并创建id


        text    : 'Save',
        icon    : "$resource(dir: 'images', file: 'SAV01004.png')",
        id      : 'save-sv01i00200201',
        action  : 'save'
    

【讨论】:

以上是关于Extjs this.up(...).down(...) 为空的主要内容,如果未能解决你的问题,请参考以下文章

Android sencha extjs 不支持事件焦点和 keyup

鼠标拖拽元素以及继承原生代码

更改extjs中网格摘要行的颜色

使用 this.up 的正确方法是啥?

如何在 Sencha Touch 的按钮处理程序中使用 this.up() 函数

模型周围的相机移动