Javascript extjs5:initConfig方法&;可观测混合素

Javascript extjs5:initConfig方法&;可观测混合素,javascript,extjs,extjs5,Javascript,Extjs,Extjs5,因为我似乎没有得到任何关于这个问题的答案,我只是在这里重复我的问题: 我目前正在从4.2.1迁移到5.1.0.107,在理解某些内容时遇到问题: Sencha dev指出,在不使用可观察mixin的类中,只需要从构造函数手动调用initConfig 中可观察的mixin的第一个示例通过手动调用它来说明其他情况 按照文档的原样运行代码会导致异常(hasListeners未定义),可以通过放置this.mixins.observable.constructor.call(this,config)来解

因为我似乎没有得到任何关于这个问题的答案,我只是在这里重复我的问题:

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

Sencha dev指出,在不使用可观察mixin的类中,只需要从构造函数手动调用
initConfig

中可观察的mixin的第一个示例通过手动调用它来说明其他情况

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

而且在我看来,
initConfig
可以从文档的示例代码中删除,没有任何缺陷(至少没有我能够复制的缺陷)

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

(从文档复制的代码)

(已删除initConfig并正确初始化mixin)

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

  • 当使用可观察的mixin时,我们是否需要在构造函数中手动调用
    initConfig
  • 我们需要手动调用mixin构造函数吗
  • 使用
    Ext.mixin.Observable
    Ext.util.Observable
谢谢并致以最诚挚的问候

以下是以下内容的摘录-

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


您提出的问题本质上是一个具有挑战性的技术支持问题。是什么让你认为它在这里比在Sencha论坛更有可能被回答?不,真的。我一直想知道人们为什么会这样做。正如我问题的第一行所述,我在这里之前已经问过了,但在那里(以及这里)没有得到任何答案。我通常这样做是为了增加我得到答案的机会,老实说,根据我的经验,在这里比在Sencha论坛上得到答案的可能性更大……是的,这正是我想问的:为什么你认为这样的问题在这里得到答案的机会更大?在Sencha论坛中,我们有支持工程师阅读每个线程,创建票据,并在需要时将其升级到核心开发人员。在这方面没有官方支持;阿飞,只有埃文和我不时地看它。所以,如果我们中的任何一个有时间,而且月亮是对的,你可能会得到一个答案。否则,运气不好。重申:有问题,有问题。如果你问一些类似于“我需要我的面板X来做Y件事,我该怎么做”的问题,很可能这里已经有人这样做了,他们可以分享他们的经验。但你的问题需要对5.x配置系统的工作原理有深入的了解,以及对可观察的mixin的熟悉;老实说,如果你发现有人可以回答这个问题,请毫不犹豫地告诉我。我们缺少优秀的开发人员,而且我们一直在招聘我总是想知道为什么人们不忽略那些让他们恼火的问题,而不是试图让OP觉得自己问的问题很愚蠢。有人需要通过斥责他人来提升自我?
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);
}
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);
}