ExtJs vtype使用VTypes与多个组合框进行比较

时间:2014-01-01 23:04:35

标签: extjs extjs4

有一个表格,我有两个组合框,每个组合框有两个组合框。第一个组框用于支付押金,第二个用于最终支付。每个组框中的第一个组合框是付款请求,第二个是强制付款。但是您无法将存款付款和所需付款设置为强制性。

因此,我一直在尝试使用VTypes来检查和比较两个必需的组合框,并在它们都设置为YES时发出消息。我无法使用field,'(form')。down('#'+ field.pmtField)获取另一个组合框的内容。 (其中pmtField在项目中定义。)

以下是代码:

(Ext.myapplication扩展Ext.grid.Panel)

var form=new Ext.myapplication(
{   
    layout : {type: 'vbox', align: 'stretch'},
    border : false,
    items: 
    [
        {
            xtype: 'fieldset',
            title: 'Deposit Requirements',
            items:
            [
                {
                    xtype : 'fieldcontainer',
                layout:{type: 'hbox'},
                border: 0,
                items: 
                [
                        {
                            xtype       : 'combobox',
                            name        : 'deposit_request_flag',
                            labelAlign  : 'top',
                            inputWidth  : 30,
                            fieldLabel  : 'Requested',
                            labelStyle  : 'font-weight:bold',
                            valueField  : 'deposit_request_flag',
                            editable    : false,
                            value       : 'f',
                            store       : [['t','YES'],['f','NO']]
                        },
                        {              
                            xtype       : 'combobox',
                            name        : 'deposit_required_flag',
                            labelAlign  : 'top',
                            inputWidth  : 30,
                            fieldLabel  : 'Required',
                            labelStyle  : 'font-weight:bold',
                            valueField  : 'deposit_required_flag',
                            editable    : false,
                            vtype       : 'depositFlagCheck',
                            pmtField    : 'payment_required_flag',
                            value       : 'f',
                            store       : [['t','YES'],['f','NO']]
                        }
                    ]
                }
            ]
        },
        {
            xtype: 'fieldset',
            title: 'Payment Requirements',
            items:
            [
                {
                    xtype : 'fieldcontainer',
                    layout:{type: 'hbox'},
                    border: 0,
                    items: 
                    [
                        {              
                            xtype       : 'combobox',
                            name        : 'payment_request_flag',
                            labelAlign  : 'top',
                            fieldLabel  : 'Requested',
                            labelStyle  : 'font-weight:bold',
                            valueField  : 'payment_request_flag',
                            editable    : false,
                            value       : 'f',
                            store       : [['t','YES'],['f','NO']]
                        },
                        {              
                            xtype       : 'combobox',
                            name        : 'payment_required_flag',
                            labelAlign  : 'top',
                            fieldLabel  : 'Required',
                            labelStyle  : 'font-weight:bold',
                            valueField  : 'payment_required_flag',
                            vtype       : 'paymentFlagCheck',
                            depField    : 'deposit_required_flag',
                            editable    : false,
                            value       : 'f',
                            store       : [['t','YES'],['f','NO']]
                        }
                    ]
                }
            ]
        }
    ]
});

以下是我的VTypes的定义:

Ext.QuickTips.init();

Ext.apply(Ext.form.field.VTypes, {
    depositFlagCheck : function(val, field) {
        var paymentFlag = field.up('form').up('form').down('#' + field.pmtField);
        if (val == 'YES') {
            if (paymentFlag.getValue() == 't') {
                return false;
            }
        }
        return true;
    },
    depositFlagCheckText  : 'You cannot require both dep and full payment amount.',
    paymentFlagCheck : function(val, field) {
        var depositFlag = field.up('form').down('#' + field.depField);
        if (val == 'YES') {
            if (depositFlag.getValue() == 't') {
                return false;
            }
        }
        return true;
    },
    paymentFlagCheckText  : 'Still cannot do it!'
});

1 个答案:

答案 0 :(得分:1)

尝试按照并告诉我结果。在这里,我添加了id这两个组件,然后尝试通过getValue()方法获取组件值。

(Ext.myapplication extends Ext.grid.Panel)

var form=new Ext.myapplication(
{   
    layout : {type: 'vbox', align: 'stretch'},
    border : false,
    items: 
    [
        {
            xtype: 'fieldset',
            title: 'Deposit Requirements',
            items:
            [
                {
                    xtype : 'fieldcontainer',
                layout:{type: 'hbox'},
                border: 0,
                items: 
                [
                        {
                            xtype       : 'combobox',
                            name        : 'deposit_request_flag',
                            labelAlign  : 'top',
                            inputWidth  : 30,
                            fieldLabel  : 'Requested',
                            labelStyle  : 'font-weight:bold',
                            valueField  : 'deposit_request_flag',
                            editable    : false,
                            value       : 'f',
                            id          : 'deposit_request_flag', 
                            store       : [['t','YES'],['f','NO']]
                        },
                        {              
                            xtype       : 'combobox',
                            name        : 'deposit_required_flag',
                            labelAlign  : 'top',
                            inputWidth  : 30,
                            fieldLabel  : 'Required',
                            labelStyle  : 'font-weight:bold',
                            valueField  : 'deposit_required_flag',
                            editable    : false,
                            vtype       : 'depositFlagCheck',
                            pmtField    : 'payment_required_flag',
                            value       : 'f',
                            id          : 'deposit_required_flag',
                            store       : [['t','YES'],['f','NO']]
                        }
                    ]
                }
            ]
        },
        {
            xtype: 'fieldset',
            title: 'Payment Requirements',
            items:
            [
                {
                    xtype : 'fieldcontainer',
                    layout:{type: 'hbox'},
                    border: 0,
                    items: 
                    [
                        {              
                            xtype       : 'combobox',
                            name        : 'payment_request_flag',
                            labelAlign  : 'top',
                            fieldLabel  : 'Requested',
                            labelStyle  : 'font-weight:bold',
                            valueField  : 'payment_request_flag',
                            editable    : false,
                            value       : 'f',
                            store       : [['t','YES'],['f','NO']]
                        },
                        {              
                            xtype       : 'combobox',
                            name        : 'payment_required_flag',
                            labelAlign  : 'top',
                            fieldLabel  : 'Required',
                            labelStyle  : 'font-weight:bold',
                            valueField  : 'payment_required_flag',
                            vtype       : 'paymentFlagCheck',
                            depField    : 'deposit_required_flag',
                            editable    : false,
                            value       : 'f',
                            store       : [['t','YES'],['f','NO']]
                        }
                    ]
                }
            ]
        }
    ]
});
Ext.QuickTips.init();

Ext.apply(Ext.form.field.VTypes, {
var depVal = Ext.getCmp('deposit_request_flag').getValue(),
payVal = Ext.getCmp('deposit_required_flag').getValue();
depositFlagCheck : function() {
    if (depVal == 'YES' && payVal == 't') {
            return false;
    }
    return true;
}