由于我似乎没有在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);
}
如果有人能回答以下问题我真的很开心:
initConfig
Ext.mixin.Observable
和Ext.util.Observable
谢谢&最好的问候
答案 0 :(得分:1)
" 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 因为框架和用户代码内部的许多类都依赖于 根据其行为。"