3

我试图在我的程序中使用自定义 Vtype。这里有很多人试图帮助我。但我无法从这些中获得太多好处。这是我的代码。

Ext.apply(Ext.form.VTypes, {
password: function(val, field) {
if (field.initialPassField) {
var pwd = Ext.getCmp(field.initialPassField);
return (val == pwd.getValue());
}
return true;
},
passwordText: 'What are you doing?<br/>The passwords entered
do not match!'
});

我将此代码包含在应用程序的“启动”功能中,并将 vtype 更改为“密码”。它有效。这是正确的方法吗?但是我得到了结果。如果我错了并且有其他方法可用,请通知我。这是我在应用程序中的启动功能。

Ext.Loader.setConfig({
enabled: true
});

Ext.application({
views: [
'signupForm'
],
autoCreateViewport: true,
name: 'MyApp',

launch: function() {
Ext.apply(Ext.form.VTypes, {
password: function(val, field) {
if (field.initialPassField) {
var pwd = Ext.getCmp(field.initialPassField);
return (val == pwd.getValue());
}
return true;
},
passwordText: 'What are you doing?<br/>The passwords entered do not match!'
});
}

});

谢谢

4

2 回答 2

1

您可以覆盖Ext.form.field.VTypes. 由于这是一个单例,它确实会Ext.form.field.VTypes直接修改对象,而不是它的原型(即Ext.form.field.VTypes.prototype)。

Ext.define('MyApp.Ext.form.field.VTypes', {
    override: 'Ext.form.field.VTypes'
    ,test: function() {
        // ...
    }
    ,testText: '...'
});

这样做的好处是类加载器将能够像标准类一样管理这个覆盖。也就是说,您可以在应用程序定义或其他任何地方要求您的覆盖。例如:

Ext.application({
    requires: [
        'MyApp.Ext.form.field.VTypes'
    ]
    // ...
});

更新

这是您的代码所提供的内容。

首先,创建文件app/VTypes.js

// I've simplified the class name, compared to above    
Ext.define('MyApp.VTypes', {
    override: 'Ext.form.field.VTypes' // <= this is the line that makes it an override

    ,password: function(val, field) {
        if (field.initialPassField) {
            var pwd = Ext.getCmp(field.initialPassField);
            return (val == pwd.getValue());
        }
        return true;
    }

    ,passwordText: 'What are you doing?<br/>The passwords entered do not match!'
});

然后,在您的应用程序定义中要求它(即app.js):

Ext.application({
    name: 'MyApp'
    ,requires: [
        'MyApp.VTypes'
    ]
    // ...
});
于 2013-11-07T10:21:06.590 回答
1

You can find your answer in the following code.

Ext.onReady(function() {    
    Ext.apply(Ext.form.VTypes, {
        password: function(val, field) {
            if (field.initialPassField) {
                var pwd = field.up('form').getForm().findField("initialPassField");
                return (val == pwd.getValue());
            }
            return true;
        },
        passwordText: 'What are you doing?<br/>The passwords entered do not match!'
    });

    Ext.create('Ext.form.Panel', {
        title: 'Simple Form',
        bodyPadding: 5,
        width: 350,
        height : 400,

        defaultType: 'textfield',
        items: [{
            fieldLabel: 'First Name',
            name: 'first',
            allowBlank: false
        },{
            fieldLabel: 'Password',
            name: 'last',
            initialPassField : true,
            vtype : 'password',
            inputType : 'password',
            allowBlank: false
        }, {
            name: 'initialPassField',
            hidden : true,
            value : 'Ajith'
        }],
        renderTo: Ext.getBody()
    });
});

Writing custom VType is the best way to validate form fields.

于 2013-11-07T10:38:06.457 回答