我有以下单例类,我认为它已正确创建。我试图从中检索一个值,但我一直得到未定义的返回值。请有人建议吗?
Ext.define('MyApp.PdfDrawRect', {
singleton: true,
config: {
zoomValue: 1
},
constructor: function (config) {
this.initConfig(config);
return this;
},
setZoomValue: function (value) {
console.log('setZoomValue');
MyApp.PdfDrawRect.zoomValue = value;
},
getZoomValue: function () {
console.log('getZoomValue');
return this.zoomValue;
}
});
用法
MyApp.getZoomValue() // 这个返回 'undefined'
你得到一个未定义的异常有两个原因。 MyApp.getZoomValue() 是未定义函数,因为 MyApp 对象未定义。完全限定的对象名称有两个级别。
第一行实例化类对象。第二行调用该类对象的函数。
var theObject = Ext.create('MyApp.PdfDrawRect');
theObject.getZoomValue();
或
var MyApp1 = Ext.create('MyApp.PdfDrawRect');
MyApp1.getZoomValue();
评论中的问题:
你构建的是一个配置。你想要的是一个财产。它们相似但不同。搜索属性的 ExtJS 示例以及如何构建 getter 和 setter。
configs - 在构造函数中传递,它定义了 类,配置不应在运行时更改,因为它不会 有什么影响,假设你需要为面板指定一个标题 然后你可以添加一个配置,例如{ title : 'some title' } 这将是 由面板用于在渲染时设置面板的标题,但之后 也就是说,即使您尝试更改标题,也不能通过以下方式更改属性 只需更改该配置选项即可。
properties - 用于存储对此有用的信息 类,这通常不通过构造函数传递,但应该有 getter 和 setter 方法,您可以在运行时更改属性(如果 setter 方法被定义)并且类对象应该检测到这个变化, 也可以有只读属性,这些属性由类修改 只有对象我们不应该改变它。
https://docs-devel.sencha.com/extjs/7.2.0/guides/core_concepts/classes.html
查看属性“name”是如何在链接的“声明”部分下的代码块中定义的。
一旦你有了 name 属性,你就可以像这样调用默认的 getter:
theObject.name = 'JohnDoe';
然后像这样调用设置器:
nameVal = theObject.name;
或者您可以通过构建自己的函数来覆盖 getter 或 setter。但是该功能不能像您那样是自定义名称。
另一方面,您可以将这些保留为配置。请参阅此示例。您可以使用配置而不是属性来模仿 getter 和 setter。