ExtJS 5:initConfig方法&可观察到的混合物

时间:2015-03-02 08:35:44

标签: javascript extjs extjs5

由于我似乎没有在Sencha Forum上得到任何答案,我只想在此重复我的问题:

我目前正在从4.2.1迁移到5.1.0.107,并且在理解某些内容时遇到了问题:

Sencha dev evant声明here只需要在不使用Observable mixin的类中从构造函数手动调用initConfig

docs中的Observable mixin的第一个例子通过手动调用来表示。

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

在我看来,initConfig可以从文档的示例代码中删除而没有任何缺点(至少没有任何我能够重现的内容)......

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

Erroneous 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);
}

Working fiddle(已正确删除initConfig&初始化mixin)

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
  • 有何不同

谢谢&最好的问候

1 个答案:

答案 0 :(得分:1)

以下是ExtJs 5.1 Upgrade Guide -

的摘录
  

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