首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExtJS 5: initConfig方法与可观测混合蛋白

问ExtJS 5: initConfig方法与可观测混合蛋白
EN

Stack Overflow用户
提问于 2015-03-02 08:35:44
回答 1查看 2.7K关注 0票数 1

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

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

Sencha dev 埃文特声明这里,在不使用可观察的混联的类中,只需要从构造函数手动调用initConfig。

文档中可观察到的混音的第一个例子通过手动调用它,结果并非如此。

运行来自文档的代码会导致异常(hasListeners是未定义的),这个异常可以通过将this.mixins.observable.constructor.call(this, config);放置到构造函数中来解决。

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

下面两个代码的唯一不同之处是雇员构造函数.

错误小提琴 (从文档中复制的代码)

代码语言:javascript
复制
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 &正确初始化mixin )

代码语言:javascript
复制
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);
}

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

  • 当使用可观察到的混音时,我们是否需要在构造函数中手动调用initConfig?
  • 我们需要手动调用混合构造函数吗?
  • 使用Ext.mixin.Observable和Ext.util.Observable有什么区别?

谢谢并致以最良好的问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-06 13:58:08

以下是ExtJs5.1升级指南的摘录-

“ExtJS5.1、ExtJS5.1中的新版本中提到的Ext.util.Observable和Ext.mixin.Observable API的统一仍然有两个可观察的类(Ext.mixin.Observable和Ext.util.Observable),但是它们的API差异已经消除了。只有一个例外: Ext.mixin.Observable在其构造函数中调用initConfig,而Ext.util.Observable使用遗留Ext.apply方法将配置对象属性复制到实例中。我们建议应用程序继续使用Ext.mixin.Observable,但在可预见的将来,我们将继续支持Ext.util.Observable,因为框架内部和用户代码中的许多类取决于它的行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28805491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档