ExtJS 5:initConfig方法&可观察的混合蛋白
ExtJS 5: initConfig method & Observable mixin
由于我在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.Observable
和Ext.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.在可预见的未来可观察由于框架内部和用户代码中的许多类依赖于根据其行为。"
- knockoutjs可观察数组
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 多次发射多个可观察器的问题
- 未激发路由的控制器属性上的观察者
- 无法在关闭弹出窗口时传递可观察的数据
- firefox插件:退出不工作的应用程序观察器
- 如何收集Knockout可观察性以放入JSON
- 混合元素的有角度的ng重复
- VueJS多个混合
- 在rxjs中巧妙的蒸汽可观察合并
- Knockout observable没有观察到其中一个属性
- 将属性设置为未定义时未通知观察者
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- KOValidation在错误消息中获取可观察值、$index()、$data等
- 启用具有多个布尔可观察标志的绑定
- 为什么prototypjs观察到回调函数有绑定
- Ember:当子控制器同时观察到父控制器触发请求的相同属性时
- 检测 DIV 的高度何时变化,而无需轮询或突变观察者
- 财产'catch'在类型'可观察<任意>'
- ExtJS 5:initConfig方法&可观察的混合蛋白