ExtJS 5:initConfig方法&可观察的混合蛋白

ExtJS 5: initConfig method & Observable mixin

本文关键字:观察 混合 amp initConfig 方法 ExtJS      更新时间:2023-09-26

由于我在Sencha论坛上似乎没有得到任何答案,我只在这里重复我的问题:

我目前正在从4.2.1迁移到5.1.0.107,在理解一些东西时遇到了问题:

Sencha-dev-evant在这里指出,initConfig只需要在不使用Observable mixin的类中从构造函数手动调用。

文档中Observable mixin的第一个例子通过手动调用它来说明情况并非如此

从文档中按原样运行代码会导致异常(hasListeners未定义),可以通过将this.mixins.observable.constructor.call(this, config);放入构造函数来解决该异常。

此外,在我看来,initConfig可以从文档的示例代码中删除,没有任何缺点(至少我无法复制)。。。

下面两个代码的唯一区别在于Employee构造函数。。。

错误的fiddle(从文档复制的代码)

Ext.define('Employee', {
    mixins: ['Ext.mixin.Observable'],
    config: {
        fullName: ''
    },
    constructor: function(config) {
        this.initConfig(config);  // We need to initialize the config options when the class is instantiated
    },
    quitJob: function() {
        this.fireEvent('quit');
    }
});
var newEmployee = Ext.create('Employee', {
    fullName: 'Ed Spencer',
    listeners: {
        quit: function() {
            alert(this.getFullName() + " has quit!");
        }
    }
});
try {
    newEmployee.quitJob(); // Throws exception since hasListener is undefined
} catch (exc) {
    alert('Error occurred: ' + exc.message);
}

工作小提琴(删除initConfig&初始化混合正确)

Ext.define('Employee', {
    mixins: ['Ext.mixin.Observable'],
    config: {
        fullName: ''
    },
    constructor: function(config) {
        // Make code work by removing call to initConfig and initializing the observable mixin
        //this.initConfig(config);  // We need to initialize the config options when the class is instantiated
        this.mixins.observable.constructor.call(this, config);
    },
    quitJob: function() {
        this.fireEvent('quit');
    }
});
var newEmployee = Ext.create('Employee', {        
    fullName: 'Ed Spencer',
    listeners: {
        quit: function() {
            alert(this.getFullName() + " has quit!");
        }
    }
});
try {
    newEmployee.quitJob(); // Will log 'Ed Spencer has quit!'
} catch (exc) {
    alert('Error occurred: ' + exc.message);
}

如果有人能回答以下问题,我将非常高兴:

  • 使用Observable mixin时,是否需要手动调用构造函数中的initConfig
  • 我们需要手动调用mixin构造函数吗
  • 使用Ext.mixin.ObservableExt.util.Observable有什么区别

谢谢&向致以最良好的问候

以下是ExtJs 5.1升级指南-的摘录

"Ext.util.Observable和Ext.mixin.Observable API的统一正如Ext JS 5.1的新增功能中所提到的,Ext JS 510仍然有两个可观测类(Ext.mixin.Observable和Ext.util.OObservable),但它们的API差异已被消除。只有一个异常:Ext.mixin.Observable在其构造函数中调用initConfig而Ext.util.Observable使用传统的Ext.apply方法来复制将对象属性配置到实例上。我们建议应用程序使用Ext.mixin.Observable,但我们将继续支持Ext.util.在可预见的未来可观察由于框架内部和用户代码中的许多类依赖于根据其行为。"