Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类中的重写和混合_Javascript_Extjs_Overriding_Mixins - Fatal编程技术网

Javascript 类中的重写和混合

Javascript 类中的重写和混合,javascript,extjs,overriding,mixins,Javascript,Extjs,Overriding,Mixins,是否可以在类中同时重写和混合 我尝试在构造函数中应用mixin,但它没有向重写添加属性/函数 我以为mixin是隐式应用于引用它们的类的 混合 推翻 这是我正在处理的问题。您无法轻松地将mixin应用于Ext.form.field.VTypes。事实上,您的构造函数从未被调用过(请查看Ext.form.field.VTypes)的源代码。此外,Ext.form.field.VTypes被定义为单例 Ext.form.field.VTypes的定义与GridPanel等的类定义非常不同。它的行为更

是否可以在类中同时重写和混合

我尝试在构造函数中应用mixin,但它没有向重写添加属性/函数

我以为mixin是隐式应用于引用它们的类的

混合 推翻
这是我正在处理的问题。

您无法轻松地将mixin应用于
Ext.form.field.VTypes
。事实上,您的构造函数从未被调用过(请查看
Ext.form.field.VTypes
)的源代码。此外,
Ext.form.field.VTypes
被定义为单例

Ext.form.field.VTypes
的定义与GridPanel等的类定义非常不同。它的行为更像一个纯JS“类”定义,因此您的mixin永远不会像“普通”ExtJS类那样被应用

不过,您可以轻松地模拟自己的混合行为:

var ip = {
    IPAddressTest : /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,
    IPAddress:  function(v) { return this.IPAddressTest.test(v); },
    IPAddressText: 'Must be a numeric IP address, for eg: 111.1.1.1',
    IPAddressMask: /[\d\.]/i
 };

var time = {
    timeTest : /^([1-9]|1[0-9]):([0-5][0-9])(\s[a|p]m)$/i,
    time: function(v, field) { return this.timeTest.test(v); },
    timeText: 'Not a valid time.  Must be in the format "12:34 PM".',
    timeMask: /[\d\s:amp]/i
};


Ext.apply(Ext.form.field.VTypes, ip);
Ext.apply(Ext.form.field.VTypes, time);

在这里,您不用重写,只需将对象定义应用于
Ext.form.field.VTypes
singleton。我认为,这样做更容易阅读和理解(但这只是我的观点)。

问题是我有两个应用程序共享相同的vType。一个应用程序将覆盖并添加其自己的验证功能。文件通过应用程序和视图加载。不确定这将如何工作?在应用程序层应用它?因为vtypes是一个单例,所以无论在何处应用它都不重要。
Ext.define('App.overrides.VTypes', {
    override : 'Ext.form.field.VTypes',
    mixins : {
        vtypes : 'App.mixins.VTypes'
    },

    IPAddressTest : /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,

    IPAddress:  function(v) { return this.IPAddressTest.test(v); },
    IPAddressText: 'Must be a numeric IP address, for eg: 111.1.1.1',
    IPAddressMask: /[\d\.]/i,

    constructor : function() {
        Ext.apply(this, this.mixins.vtypes);

        this.callParent(arguments);
    }
});
var ip = {
    IPAddressTest : /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,
    IPAddress:  function(v) { return this.IPAddressTest.test(v); },
    IPAddressText: 'Must be a numeric IP address, for eg: 111.1.1.1',
    IPAddressMask: /[\d\.]/i
 };

var time = {
    timeTest : /^([1-9]|1[0-9]):([0-5][0-9])(\s[a|p]m)$/i,
    time: function(v, field) { return this.timeTest.test(v); },
    timeText: 'Not a valid time.  Must be in the format "12:34 PM".',
    timeMask: /[\d\s:amp]/i
};


Ext.apply(Ext.form.field.VTypes, ip);
Ext.apply(Ext.form.field.VTypes, time);