【问题标题】:ExtJs vtype compare using VTypes with multiple combo boxesExtJs vtype 使用具有多个组合框的 VType 进行比较
【发布时间】:2014-01-02 16:18:28
【问题描述】:

有一个表单,其中我有两个组合框,每个组合框有两个组合框。第一个组框用于支付押金,第二个用于支付尾款。每个组框中的第一个组合框是请求付款,第二个是强制付款。但是您不能将定金和所需付款都设置为强制。

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

代码如下:

(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']]
                        }
                    ]
                }
            ]
        }
    ]
});

这是我的 VType 的定义:

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!'
});

【问题讨论】:

  • 将 var paymentFlag = field.up... 行更改为 var field = Ext.getCmp('payment_required_flag');并将 id 值添加到组合框定义中,现在它可以工作了。
  • 要使用down,我认为您需要为每个组合框添加一个itemId,即。 'itemId':'payment_required_flag' 然后获取组件:field.up('form').down('#payment_required_flag')

标签: extjs extjs4


【解决方案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;
}

【讨论】:

  • 这正是我最终为使其工作所做的工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 1970-01-01
  • 2022-01-09
相关资源
最近更新 更多